leecode第八题(字符串转换整数 (atoi))

bool Flag_err=1;//判断返回0是因为错误还是真的是0

class Solution {
public:
    int myAtoi(string str) {//写的很丑
        
        if (str=="")
            return 0;
        
        long res=0;
        int flag_sign=1;
        bool flag_blank=true;//检验空格是否检测完
        bool flag_fir=true;//检验第一个值
        
        for (int i=0;i<str.size();i++)
        {
            if(flag_blank && str[i]==' ')
                continue;
            
            if(flag_fir)//检测第一个值,一旦检测到flag_blank和flag_fir都变假
            {
                flag_blank=false;
                flag_fir=false;
                if (str[i]=='-')
                {
                    flag_sign=-1;
                    continue;
                }
                else if (str[i]=='+')
                    continue;
                else if (str[i]>='0'&&str[i]<='9')
                {
                    res=res*10+flag_sign*(str[i]-'0');
                    Flag_err=0;//除非有数字加入才解开flag_err,这也防止出现第一个为加减符号,就认为str是有效输入了
                    continue;
                } 
                else
                    return 0;
            }
            
            if(str[i]>='0' && str[i]<='9')
            {
                Flag_err=0;
                res=res*10+flag_sign*(str[i]-'0');
                if(flag_sign==1 && res>0x7FFFFFFF)
                {
                    res=INT_MAX;
                    break;
                }
                if(flag_sign==-1 && res<(signed int)0x80000000)
                {
                    res=INT_MIN;
                    break;
                }
            }
            else 
                break;//一旦发现非数字,就退出
            
        }
        
        if (flag_blank)//全部为空格情况
            return 0;
          
        return int(res);
    }
};

总结:

这题我在剑指offer书上看过,情况稍微有点不一样,但大部分特殊情况我都还记得(还没超过三天)。。

这题按部就班写没啥,就是编程还是不熟练,且太粗心,还是练得少。

原文地址:https://www.cnblogs.com/CJT-blog/p/10574785.html