2009-01-19 107 views
1

我目前正在尝试将整数转换为列表。将整数转换为列表?

E.g.

1234 =>列表组成的1,2,3,4

我有这样的:

(string->list (number->string 1234)) 

不幸的是它增加了#的和\的给它。我猜这是一个数字的字符串表示。我如何删除这些符号。因为我需要重新整理整数,并打印出一个列表。

这是上面的命令的输出:

(#\ 1#\ 2#\ 3#\ 4)

回答

5

下面是我写了一个函数,通过由10各自分割打破了数字向下时间:

(define (num->list num) 
    (if (< num 10) 
     (list num) 
     (append (num->list (floor (/ num 10))) 
       (list (- num (* 10 (floor (/ num 10)))))))) 

很明显,这只适用于正整数,但如果您需要负值,它可以很容易地修改。

0

我对方案并不熟悉,但稍微更密码化,与语言无关的方法是使用数学循环来获取每个数字。

如果1234为x: digit_1 = x%的10 digit_2 = X%100 - digit_1 digit_3 = x%的1000 - digit_2 - digit_1 等

您将需要在每个站添加复,如果x < 1000,则在数字3之后停止。取决于语言,可以通过各种方式为其添加循环。

0

当您将字符串转换为列表时,您正在构建一个字符列表,这就是为什么您得到#。 #\是字符分隔符。所以当你完成你的列表操作时,你可以很容易地将它重新转换回字符串。

3

正如乔纳森所说,#\意味着它是一个角色。所以你必须将角色转换为数字。这是一个简单的方法。

(map (lambda (c) (- (char->integer c) 48)) 
     (string->list (number->string 1234))) 
0

我就帮你注意的是:

(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)))))))