[python3]|[python3] 67 将字符串转化为数字
题目描述:实现类似c中atoi()函数的功能,将一个字符串转化为数字。如字符串'123'转化为123.
需要考虑的问题:
1). 字符串第一位有没有符号,即+,-;
这里假设没有(如果有符号,还需要考虑若只有一个符号的情况,也应该返回0并设置为非法输入)
2). 字符串前后有没有空格;若首尾有空格,使用strip()函数去除;去除左侧空格,用lstrip();
去除右侧空格,用rstrip()
3). 若输入字符串为空,则返回0;此时需要考虑,若输入字符串也为0的情况。
4). 若输入的字符串越界,则应该将最终的数字限定在整数范围内。
方法1:'123' 转化为数字,则为 1 * 10^2 + 2 * 10^1 + 3 * 10^0 = 123,因此可以从字符串后面向前面遍历,从而得到具体的和;
方法二:也可以从前向后遍历,当遍历第一个字符 '1' 时,假设只有这一位数字,则为数字 num = 1;再向后遍历到第二个字符 '2',此时前面已经有一个数字 1 了,此时的数字应为num = num * 10 + 2 = 12;
再向后遍历到第三个字符 '3',此时前面已经有数字num = 12了,此时的数字应为num = num * 10 + 3 = 12 * 10 + 3 = 123.
【[python3]|[python3] 67 将字符串转化为数字】对应的代码如下:
方法一对应的代码:
# stringToInt_1.pydef stringToInt_1(inputStr):
# 定义一个全局变量status,若输入字符串为'0',则返回数字0,并且status置为true;若输入字符串为空,则返回数字0,且status置为false
status = True
if inputStr == "":
status = False
return 0, status
inputStr.strip()
num = 0
j = 0
for i in range(len(inputStr) - 1, -1, -1):
if inputStr[i] >= '0' and inputStr[i] <= '9':
num += (ord(inputStr[i]) - ord('0')) * (10 ** j)
j += 1
else: #若遇到'0'-'9'之外的字符,num设置为0,且直接退出
status = False
num = 0
break
if num > 2**32 - 1: #若转换后的数字越界,则应该将转换后的数字限定为最大值
num = 2**32 - 1
return num, statusif __name__ == "__main__":
inputStr = '123'
num, status = stringToInt_1(inputStr)
print("num = ", num, ", status = ", status)
方法二对应的代码:
#stringToInt.pydef stringToInt(inputStr):
# 定义一个全局变量status,若输入字符串为'0',则返回数字0,并且status置为true;若输入字符串为空,则返回数字0,且status置为false
status = True
if inputStr == "":
status = False
return 0, status
inputStr.strip() # 去掉输入字符串首尾的空格
num = 0
for inputStrs in inputStr:
if inputStrs > '0' and inputStrs < '9':
num = num * 10 + ord(inputStrs) - ord('0') #ord函数得到字符对应的ASCII码值
else: #若遇到'0'-'9'之外的字符,num设置为0,且直接退出
status = False
num = 0
break
if num > 2**32 - 1: #若转换后的数字越界,则应该将转换后的数字限定为最大值
num = 2**32 - 1
return num, statusif __name__ == "__main__":
inputStr = '123'
num, status = stringToInt(inputStr)
print("num = ", num, ", status = ", status)
推荐阅读
- 即将到手三百万
- 思友人
- 一起来学习C语言的字符串转换函数
- 20210307《挑战赛怂人胆》【能量将帅挑战赛(01)】
- 苍灵十二将I|苍灵十二将I 第一百二十五章 关门猎兽
- 字符串拼接成段落,换行符(\n)如何只执行n-1次
- 那条灰色的人行道
- 《没有你我将会很幸福》
- C语言的版本比较
- 《将来的你,一定会感谢现在战胜烦恼的自己-------第四章/第十一节/用逆向思维解除烦恼》