当前位置: 首页 > 知识库问答 >
问题:

将字符串转换为整数ML的递归函数

郎永福
2023-03-14

我需要在 ML 中编写自己的递归函数,该函数以某种方式使用 ord 将一串数字转换为整数类型。我可以使用辅助函数,但显然我应该能够在不使用辅助函数的情况下做到这一点(根据我的教授的说法)。

我可以假设输入是有效的,并且是一个正整数(当然是字符串类型)。

因此,调用str2int("1234")应该输出1234: int

我假设我需要在某个时候使用爆炸和内爆,因为 ord 对字符进行操作,而我的输入是一个字符串。任何方向将不胜感激。

共有3个答案

萧鸿轩
2023-03-14

这是我想到的:

js prettyprint-override">fun pow10 n =
    if n = 0 then 1 else 10*pow10(n-1);

fun str2help (L,n) =
    if null L then 0 
    else (ord(hd L)-48) * pow10(n) + str2help(tl L, n-1);

fun str2int (string) =
    str2help(explode string, size string -1);
    
str2int ("1234");
池宸
2023-03-14

您可以定义一个助手函数< code>charsToInt来从左到右处理字符串中的数字。在每一步中,它将最左边的数字< code>c转换成一个数字,并与< code>n的10x倍数(它是所有先前解析的数字的中间和)进行加法运算...

fun charsToInt ([], n) = n
  | charsToInt (c :: cs, n) = charsToInt (cs, 10*n  + ord c - 48)

val n = charsToInt (explode "1024", 0)  

为您提供:val n=1024:int

正如您所看到的,诀窍是在每次递归调用时将中间结果向下传递到下一步。这是处理此类问题时非常常见的技术。

袁奇文
2023-03-14

既然你问了,我想我可以毁了你所有的乐趣。这将解决你的问题,但讽刺的是,它不会帮助你。

好吧,字符#'0'的序数是48。所以,这意味着如果您减去表示数字的任何序数,则数字48您将获得其十进制值。例如

ord(#"9") - 48

产量9。

因此,一个函数将一个表示0-9之间的数字的给定字符转换成相应的十进制数:

fun charToInt(c) = ord(c) - 48

假设你有一串数字,比如“2014”。然后,您可以先将字符串分解为字符列表,然后将每个字符映射到其相应的小数。

例如

val num = "2014"
val digits = map charToInt (explode num)

< code>explode函数是一个辅助函数,它获取一个字符串并将其转换为一个字符列表。

现在数字将是一个整数列表,表示十进制数[2,0,1,4]

然后,您所需要的只是应用 10 的幂来获得最终整数。

2 * 10 ^ 3 = 2000
0 * 10 ^ 2 = 0
1 * 10 ^ 1 = 10
4 * 10 ^ 0 = 4

结果将是2000 0 10 4=2014

 类似资料:
  • 问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo

  • 问题内容: 有什么方法可以将null转换为Integer。null实际上是一个字符串,我在我的服务层中传递该字符串,将其接受为整数。因此,每当我尝试将null字符串强制转换为Integer时,都会引发异常。但是我必须将null转换为Integer。 问题答案: 您 不能 从String强制转换为Integer。但是,如果您尝试将字符串转换为整数,并且必须提供处理字符串的实现,请查看以下代码片段:

  • 问题内容: 给定一个数字: 将其转换为字符串的“最佳”方法是: 问题答案: 有多种方法: (我的偏爱) (我不知道编译器如何处理它,也许它和上面一样有效)

  • 问题内容: 我有一个整数 在声明中,我必须将其与一些字符串进行比较。我不能在开始时设置为字符串,因为必须在循环中将其递减。 如何转换? 问题答案: 我找到了答案。 将整数转换为字符串: 将字串转换为整数:

  • 问题内容: 有没有人能将不安全的字符串转换为? 该字符串通常回来为:或类似的东西。 在这种情况下,我要。如果我想。我从不希望该方法失败,但是我不愿意尝试,除非通过它只是为了隐藏错误(以防万一发生极端情况)。 问题答案: 在这种情况下,您确实有一种避免/的方法,尽管我不建议这样做(假设您的输入字符串名为,并且您处于必须返回某些内容的函数中): 将在部分就是你回什么是你想要比如说,如果是,空,全空间,

  • 如何将字符串值转换为整数,并将转换后的值乘以整数,这样我就可以得到300.00的结果。见下面的例子- 如果我像这样编码,那么我就会出错-