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书上看过,情况稍微有点不一样,但大部分特殊情况我都还记得(还没超过三天)。。
这题按部就班写没啥,就是编程还是不熟练,且太粗心,还是练得少。