[LeetCode OJ][008]String to Integer (atoi)

实现转换字符串为整数的atoi
提示:仔细考虑所有可能的输入。如果你希望挑战的话,不要看下文,自己问自己会有什么样的可能的输入。
:这道题有意使用了混乱的描述(比如,没有指出输入的格式)。你要负责处理所有可能的输入。
更新(2015-2-10)
C++的函数签名已更新。如果你看到你的函数签名接受const char *作为参数,请点击重新加载按钮来重设函数定义。
atoi的要求
函数首先抛弃尽可能多的空格,直到发现第一个非空格字符。然后,从这个字符开始,撷取一个可选的正负号后接尽可能多的数字,将它们转换为数值。
在数字的后面,字符串可能含有其他字符,它们将被忽略,不影响函数的行为。
如果第一个非空格的序列不是有效的数值,或不存在这种序列(字符串空或只含空格),将不做任何转换。
如果没有有效的转换,返回零。如果数值大于数值能表示的范围,返回INT_MAX(2147483647)或INT_MIN(-2147483648)。

我的想法:

  • 这题是要自己实现atoi,所以用Python就太耍赖了,C++也可以用stringstream之类的间接耍赖。
  • 溢出检查和第007题类似,但是要检查新数等于-214748364或214748364的情况。

C89(5ms):

int myAtoi(char *str)
{
    int negative = 0, answer = 0, current;
    for(; *str != '\0' && *str == ' '; ++str);
    if(*str == '+') ++str;
    else if(*str == '-')
    {
        negative = 1;
        ++str;
    }
    for(; *str >= '0' && *str <= '9'; ++str)
    {
        current = *str - '0';
        if(answer > 214748364)
        {
            if(negative)
                return -2147483648;
            return 2147483647;
        }
        else if(answer == 214748364)
        {
            if(negative && current == 9)
            {
                return -2147483648;
            }
            if(!negative && current > 7)
            {
                return 2147483647;
            }
        }
        answer = answer * 10 + current;
    }
    if(negative)
        return -answer;
    return answer;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值