【发布时间】:2011-08-19 15:00:01
【问题描述】:
许多语言都有将字符串转换为整数的函数,反之亦然。那么那里会发生什么?转换过程中执行的是什么算法?
我没有用特定的语言问,因为我认为它们应该是相似的。
【问题讨论】:
许多语言都有将字符串转换为整数的函数,反之亦然。那么那里会发生什么?转换过程中执行的是什么算法?
我没有用特定的语言问,因为我认为它们应该是相似的。
【问题讨论】:
要将字符串转换为整数,请依次获取每个字符,如果它在 '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
【讨论】:
我不会将其称为算法本身,但根据语言的不同,它将涉及将字符转换为它们的整数等价物。许多语言要么在第一个不能表示为整数的字符处停止(例如字母a),要么将所有字符盲目地转换为它们的ASCII值(例如,字母a变成97),或者将忽略不能表示为整数的字符,只能转换可以 - 或返回 0 / 空的字符。您必须更具体地了解框架/语言才能提供更多信息。
【讨论】:
字符串转整数:
许多(大多数)语言在某种程度上将字符串表示为字符数组(或列表),这些字符也是短整数。将与数字字符对应的那些映射到它们的数字值。例如,ascii 中的“0”由 48 表示。因此,您将 48 映射到 0,将 49 映射到 1,依此类推到 9。
从左边开始,将当前总数乘以 10,加上下一个字符的值,然后继续。 (您可以制作更大或更小的地图,更改每一步乘以的数字,并转换您喜欢的任何基数的字符串。)
整数到字符串是一个较长的过程,涉及到基本转换为 10。我想由于大多数整数的位数有限(通常为 32 或 64),你知道它最多会在一个字符串中出现一定数量的字符(20?)。因此,您可以设置自己的加法器并在计算其值(2^place)后遍历每个位的每个位置。
【讨论】: