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

时间:2011-08-19 15:00:01

标签: string algorithm integer

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

我没有用特定的语言提问,因为我认为它们应该在所有语言中都相似。

3 个答案:

答案 0 :(得分:14)

要将字符串转换为整数,请依次取每个字符,如果它在“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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

String to integer:

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

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

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