许多语言都具有将字符串转换为整数的功能,反之亦然。那么那里发生了什么?转换期间正在执行什么算法?
我没有用特定的语言提问,因为我认为它们应该在所有语言中都相似。
答案 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 ^位置)后迭代每个位置。