Leetcode 8 String to Integer (atoi)

来源:互联网 发布:网络工程项目名称 编辑:程序博客网 时间:2024/05/22 13:12

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;    }};




0 0