在String中将字符串形式的数字转换为整数

时间:2017-02-01 02:44:48

标签: scheme racket

如何将拼写数字的字符串(例如" 4")转换为整数?总而言之,我试图改变四个"我需要转换的数字范围是1-99。超过九的数字将有一个破折号(例如:二十五)。

我尝试过,string-> number,但这会返回false。我不知道还有什么可以尝试的。

请帮忙。

2 个答案:

答案 0 :(得分:0)

这是一个有趣的解决方案:

(define count
  (lambda (limit)
    (let loop ((i 0))
      (let ((number (format #f "~r" i)))
        (if (equal? number limit)
            i
            (loop (+ i 1)))))))

答案 1 :(得分:0)

以下是将数字从字符串形式转换为整数形式的一种方法:

(define (string->num string)
  (define dict '(("one" 1) ("two" 2) ("three" 3) ("four" 4) ("five" 5)
                 ("six" 6) ("seven" 7) ("eight" 8) ("nine" 9) ("ten" 10)
                 ("eleven" 11) ("twelve" 12) ("thirteen" 13) ("fourteen" 14)
                 ("fifteen" 15) ("sixteen" 16) ("seventeen" 17) ("eighteen" 18)
                 ("ninteen" 19) ("twenty" 20) ("thirty" 30) ("forty" 40)
                 ("fifty" 50) ("sixty" 60) ("seventy" 70) ("eighty" 80)
                 ("ninety" 90)))
  (define (get-num str lst)
    (cond [(empty? lst) 0]
          [(equal? str (first (first lst)))
           (second (first lst))]
          [else (get-num str (rest lst))]))
  (define str-lst (regexp-split #rx"-" string))
  (define len (length str-lst))
  (define base (get-num (first str-lst) dict))
  (cond [(equal? len 1)
         base]
        [(equal? len 2)
         (+ base (get-num (second str-lst) dict))]))

函数使用正则表达式拆分将字符串分成两个非连字符部分,例如。 (regexp-split #rx"-" "twenty-four")返回'("twenty" "four")(regexp-split #rx"-" "one")返回'("one")。我的想法是使用字典(列表列表)作为源,并查找字符串的值,如果是单个字符串,或查找两个字符串的值,如果有连字符。如果有两个字符串,则添加它们的值,例如。来自'("twenty" "four"),两者的价值"二十"和"四"查找,然后将它们添加到返回24(20 + 4)。