0
点赞
收藏
分享

微信扫一扫

剑指 Offer 67. 把字符串转换成整数

倪雅各 2022-02-04 阅读 111

题目描述:

分析:我真的巨烦这种字符串验证和匹配的问题,麻烦的要死,到处都是边界,实话实说,这道题我是根据每个造成错误的测试用例修改写出来的,真的心累。。。。尤其是最后几个测试用例,那是一个一个改,每个测试用例都能发现我程序中的毛病

不多说了,上代码,注释和题解的优秀解法等明天再说吧,确实太晚了

class Solution {
public:
    int strToInt(string str) {
        bool firstblank=true;
        bool ifhasfuhao=false;
        bool firstzero=true;
        int firstzeroindex=2147483647;
        int firstfuhaoindex=2147483647;
        int firstblankindex=2147483647;
        bool ifhasshuzi=false;
        char fuhao=' ';
        string tempres;
        for(int i=0;i<str.size();i++)
        {
            if(str[i]==' ')
            {
                if(ifhasshuzi) break;
                if(firstblank)
                {
                    continue;
                }
                else
                    break;

            }
            if((str[i]=='+'||str[i]=='-'))
            {
                if(ifhasshuzi) break;
                if(!ifhasfuhao)
                {
                    if(firstzeroindex<firstfuhaoindex)
                    return 0;
                    fuhao=str[i];
                    ifhasfuhao=true;
                    firstblank=false;
                    firstfuhaoindex=i;
                    continue;
                }
                else
                    break;

            }
            if(str[i]>='0'&&str[i]<='9')
            {
                ifhasshuzi=true;
                if(str[i]=='0'&&firstzero)
                {
                    firstzeroindex=i;
                    continue;

                }
                
                tempres+=str[i];
                firstblank=false;
                firstzero=false;
                continue;
            }
            else
                break;
        }
        // cout<<tempres<<endl;
        if(tempres=="") return 0;
        return converse(tempres,fuhao);
    }
    int converse(string str,char fuhao)
    {
        int start=0;
        if(fuhao==' ')
            fuhao='+';
        int len=str.size();
        if(len>10&&fuhao=='-') 
            return -2147483648;
        else if(len>10)
            return 2147483647;
        unsigned long long int res=0;
        unsigned long long int base=1;
        for(int i=len-1;i>=0;i--)
        {
            char c=str[i];
            int temp=c-'0';
            res=res+temp*base;
            base=base*10;

        }
        if(res>2147483648&&fuhao=='-')
            return -2147483648;
        if(res>2147483647&&fuhao=='+')
            return 2147483647;
        if(fuhao=='-')
            return -1*res;
        else
            return res;
        return 0;


        

    }
};

 

举报

相关推荐

0 条评论