【问题标题】:How compiler is converting integer to string and vice versa编译器如何将整数转换为字符串,反之亦然
【发布时间】:2011-08-19 15:00:01
【问题描述】:

许多语言都有将字符串转换为整数的函数,反之亦然。那么那里会发生什么?转换过程中执行的是什么算法?

我没有用特定的语言问,因为我认为它们应该是相似的。

【问题讨论】:

    标签: string algorithm integer


    【解决方案1】:

    要将字符串转换为整数,请依次获取每个字符,如果它在 '0' 到 '9' 范围内,则将其转换为等效的十进制数。通常这只是减去'0'的字符值。现在将任何先前的结果乘以 10 并添加新值。重复直到没有数字。如果有前导的“-”减号,则反转结果。

    要将整数转换为字符串,首先要反转数字(如果它是负数)。将整数除以 10 并保存余数。通过添加字符值“0”将余数转换为字符。将其推到字符串的开头;现在重复您从除法中获得的值。重复直到除法值为零。如果数字开始为负数,则添加一个前导的“-”减号。

    以下是 Python 中的具体实现,我认为 Python 是最接近伪代码的语言。

    def string_to_int(s):
        i = 0
        sign = 1
        if s[0] == '-':
            sign = -1
            s = s[1:]
        for c in s:
            if not ('0' <= c <= '9'):
                raise ValueError
            i = 10 * i + ord(c) - ord('0')
        return sign * i
    
    def int_to_string(i):
        s = ''
        sign = ''
        if i < 0:
            sign = '-'
            i = -i
        while True:
            remainder = i % 10
            i = i / 10
            s = chr(ord('0') + remainder) + s
            if i == 0:
                break
        return sign + s
    

    【讨论】:

    • 这不是“它的十进制等价物”——它是将数字字符转换为数字。
    【解决方案2】:

    我不会将其称为算法本身,但根据语言的不同,它将涉及将字符转换为它们的整数等价物。许多语言要么在第一个不能表示为整数的字符处停止(例如字母a),要么将所有字符盲目地转换为它们的ASCII值(例如,字母a变成97),或者将忽略不能表示为整数的字符,只能转换可以 - 或返回 0 / 空的字符。您必须更具体地了解框架/语言才能提供​​更多信息。

    【讨论】:

      【解决方案3】:

      字符串转整数:

      许多(大多数)语言在某种程度上将字符串表示为字符数组(或列表),这些字符也是短整数。将与数字字符对应的那些映射到它们的数字值。例如,ascii 中的“0”由 48 表示。因此,您将 48 映射到 0,将 49 映射到 1,依此类推到 9。

      从左边开始,将当前总数乘以 10,加上下一个字符的值,然后继续。 (您可以制作更大或更小的地图,更改每一步乘以的数字,并转换您喜欢的任何基数的字符串。)

      整数到字符串是一个较长的过程,涉及到基本转换为 10。我想由于大多数整数的位数有限(通常为 32 或 64),你知道它最多会在一个字符串中出现一定数量的字符(20?)。因此,您可以设置自己的加法器并在计算其值(2^place)后遍历每个位的每个位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2012-04-27
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多