一尘不染

编译器如何将整数转换为字符串,反之亦然

algorithm

许多语言都具有将字符串转换为整数(反之亦然)的功能。那么那里发生了什么?转换期间正在执行什么算法?

我不要求使用特定语言,因为我认为所有语言都应该相似。


阅读 273

收藏
2020-07-28

共1个答案

一尘不染

要将字符串转换为整数,请依次转换每个字符,如果它在‘0’到‘9’范围内,则将其转换为等效的十进制数。通常,这只是简单地减去字符值“
0”。现在,将以前的结果乘以10,然后添加新值。重复直到没有剩余数字。如果前导减号(-),则将结果取反。

要将整数转换为字符串,请先反转数字(如果为负数)。将整数除以10,然后保存余数。通过将字符值“
0”相加,将余数转换为字符。将其推到字符串的开头;现在,重复您从该部门获得的值。重复直到除数为零。如果数字开头为负,请在前面加一个减号。

以下是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
2020-07-28