我目前正在嘗試將整數轉換爲列表。將整數轉換爲列表?
E.g.
1234 =>列表組成的1,2,3,4
我有這樣的:
(string->list (number->string 1234))
不幸的是它增加了#的和\的給它。我猜這是一個數字的字符串表示。我如何刪除這些符號。因爲我需要重新整理整數,並打印出一個列表。
這是上面的命令的輸出:
(#\ 1#\ 2#\ 3#\ 4)
我目前正在嘗試將整數轉換爲列表。將整數轉換爲列表?
E.g.
1234 =>列表組成的1,2,3,4
我有這樣的:
(string->list (number->string 1234))
不幸的是它增加了#的和\的給它。我猜這是一個數字的字符串表示。我如何刪除這些符號。因爲我需要重新整理整數,並打印出一個列表。
這是上面的命令的輸出:
(#\ 1#\ 2#\ 3#\ 4)
下面是我寫了一個函數,通過由10各自分割打破了數字向下時間:
(define (num->list num)
(if (< num 10)
(list num)
(append (num->list (floor (/ num 10)))
(list (- num (* 10 (floor (/ num 10))))))))
很明顯,這隻適用於正整數,但如果您需要負值,它可以很容易地修改。
我對方案並不熟悉,但稍微更密碼化,與語言無關的方法是使用數學循環來獲取每個數字。
如果1234爲x: digit_1 = x%的10 digit_2 = X%100 - digit_1 digit_3 = x%的1000 - digit_2 - digit_1 等
您將需要在每個站添加復,如果x < 1000,則在數字3之後停止。取決於語言,可以通過各種方式爲其添加循環。
當您將字符串轉換爲列表時,您正在構建一個字符列表,這就是爲什麼您得到#。 #\是字符分隔符。所以當你完成你的列表操作時,你可以很容易地將它重新轉換回字符串。
正如喬納森所說,#\意味着它是一個角色。所以你必須將角色轉換爲數字。這是一個簡單的方法。
(map (lambda (c) (- (char->integer c) 48))
(string->list (number->string 1234)))
我就幫你注意的是:
(floor (/ num 10))
是一樣的方式,採用商的過程:
(quotient num)
下面是它的例子:
Welcome to DrRacket, version 6.1.1 [3m].
Language: Pretty Big; memory limit: 128 MB.
> (floor (/ 235 10))
23
> (quotient 235 10)
23
這樣我們可以重寫@Kyle函數w看起來像這樣:
(define (numberToList number)
(if (< number 10) (list number)
(append (numberToList (quotient number 10))
(list (- number (* 10 (quotient number 10)))))))