atoi的实现
atoi
C语言中有一个函数实现了该功能,即将字符串转换为整数,记得曾经面试的时候考了这道题。自己用Python实现一下。
思路:能够正常转换成数字的字符串必须要满足每一个字符都是数字字符。因此要考虑所有不符合条件的情况:
- 空字符串,那没得说了。
- 字符串中含有别的字符(s-'0'大于9或者小于0);
还要考虑开头是加号或者减号。代码如下:
def atoi(string):
if not string:
raise ValueError('the string is empty')
num,flag,start = 0,1,0
if string[0] == '-':
flag,start = -1,1
elif string[0] == '+':
start = 1
for e in string[start:]:
#Python中字符串不能直接相减,要转换为ASCII编码值;
conv_int = ord(e) - ord('0')
if conv_int < 0 or conv_int > 9:
break
num = num*10 + conv_int
#如果字符串中含有不满足要求的字符,那么就会跳出循环,也就是说不会执行后续的else语句,这是Python的特性。
else:
#如果超过临界值,就应该设置num为临界值。
bound = 2**31 -1
if num > bound:
num = bound
return num*flag
raise ValueError('the string is not valid')
print atoi('123')
print atoi('+123')
print atoi('-123')
print atoi('sd')
再来一个JAVA版本的:
public static Integer atoi(String str){
if (Objects.isNull(str)){
return null;
}
int flag = 1;
// flag = str.startsWith("+") ? 1 : -1;
int start = 0;
char head = str.charAt(0);
if (head == '+'){
start = 1;
}else if (head == '-'){
start = 1;
flag = -1;
}
int sum = 0;
while (start < str.length()){
char cur = str.charAt(start);
int curInt = (int) cur - (int)'0';
System.out.println(curInt);
if (curInt > 9 || curInt < 0){
return null;
}
sum = sum * 10 + curInt;
start++;
}
return flag * sum;
}
--------EOF---------
微信分享/微信扫码阅读
微信分享/微信扫码阅读