请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
思路:1.先判断正负数差记录+-号
2.数字逐一读列表
3.输出列表,并添加正负号
class Solution:
def myAtoi(self, str):
str=str.lstrip() #去除左空格
num="0123456789" #数字
symbol={'-':-1,'+':1} #附号
if len(str)==0: return 0
res_lst=[]
res_int=0
sign=1
flag=True
if str[0] in symbol: #获取+-号
sign=symbol[str[0]]
elif str[0] in num: #数字直接入列
res_lst.append(str[0])
else:
return 0
i=1
while i<len(str) and flag: #循环
if str[i] in num:
res_lst.append(str[i]) #数字直接入列
i=i+1
else:
flag=False
if len(res_lst)>0:
res_int=int("".join(res_lst))*sign
INT_MAX=2**31-1 #数字溢出检查
INT_MIN=-2**31
if res_int>INT_MAX: return INT_MAX
if res_int<INT_MIN: return INT_MIN
return res_int #返回正确值
else:
return 0
print(Solution().myAtoi(' -42'))
print(Solution().myAtoi('words and 987'))
来源:oschina
链接:https://my.oschina.net/tedzheng/blog/3164604