atoi的实现

atoi

C语言中有一个函数实现了该功能,即将字符串转换为整数,记得曾经面试的时候考了这道题。自己用Python实现一下。

思路:能够正常转换成数字的字符串必须要满足每一个字符都是数字字符。因此要考虑所有不符合条件的情况:

  1. 空字符串,那没得说了。
  2. 字符串中含有别的字符(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')

 

 

 

--------EOF---------
本文微信分享/扫码阅读