Leetcode 8 String to Integer (atoi)

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

挺简单又挺难的一道题,就是坑太多,已经不是丧心病狂能形容了,估计这也是算法竞赛和这种面试题之间的区别吧。

好吧,我承认我WA了10发,坑点请看代码注释。

class Solution {
public:
    int myAtoi(string str) {
        if(str.length()==0) // 1.空串
            return 0;
        int flag=0,first=0;
        while(str[first]==' ')// 2.前置空格去除
            first++;
        if(str[first]=='-') //3.负号
        {
            flag=1;
            first++;
        }
        else if(str[first]=='+')//4.还尼玛能出现正号,正负号只在开头出现一次的是合法的
            first++;
        if(str[first]<'0' || str[first]>'9') //5.除了正负号和数字还可能有其他字符,判为0
            return 0;
        long long ans=0;
        int cnt=0;
        for(int i=first;i<str.length();i++)
        {
            cnt++;
            if(cnt>17) //6.位数过大溢出longlong,更不用说int了
            {
                if(flag)
                    return INT_MIN;
                else
                    return INT_MAX;
            }
            if(str[i]<'0' || str[i]>'9') //7.中途出现其他字符要中断,但前面的数字依旧视为合法的
                break;
            ans*=(long long)10;
            ans+=(long long)(str[i]-'0');
        }
        if(flag)
            ans=-ans;
        if(ans>INT_MAX)//8.int溢出处理
            return INT_MAX;
        if(ans<INT_MIN)
            return INT_MIN;
        return (int)ans;
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值