请你来实现一个?atoi?函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
因为这个要求在这道题里经常被用到,因此写为函数方便使用。检查方法是使用ASCII码。Python中,ord(char)
函数将character转化为相应的ASCII码,然后我们只需要判断一个character的ASCII码是否落在相应的范围(0~9)就可以判断它是否是integer了。代码如下:
# Use to check wheter a character is an integer or not
def check_number(char):
try:
if ord(char) >= ord('0') and ord(char) <= ord("9"):
return True
else:
return False
except:
return False
class Solution:
def myAtoi(self, str: str) -> int:
# Detect blank string
if len(str) == 0:
return 0
# Delete blanks at head of the string:
meet_noblank = False
new_string = ""
for i in str:
if i == ' ' and not meet_noblank:
continue
else:
meet_noblank = True
new_string += i
# Detect blank string
if len(new_string) == 0:
return 0
# Pick the symbol from the string
flag = "+"
if new_string[0] == '-' or new_string[0] == '+':
flag = new_string[0]
new_string = new_string[1:]
# Detect the blank string
if len(new_string) == 0 or not check_number(new_string[0]):
return 0
# Pick the number from the string
number = ""
for i in new_string:
if check_number(i):
number += i
# If i is not a number, break the loop
else:
break
# Add the symbol to the number
answer = int(flag + number)
# Check whether the answer is in the legal range
if answer > 2**31-1:
return 2**31-1
if answer < -2**31:
return -2**31
return answer
原文:https://www.cnblogs.com/meloyang/p/12291889.html