classSolution{public:intStrToInt(string str){int num =0;bool flag =true;// true:+, false:-int start =0;if(str[0]=='+'|| str[0]=='-'){
flag = str[0]=='+';++start;}elseif(str[0]<='0'|| str[0]>='9')return0;for(int i = start; i < str.length();++i){if(str[i]<='0'|| str[i]>='9')return0;
num = num *10+ str[i]-'0';}return num *(flag ?1:-1);}};
更鲁棒代码
classSolution{public:intStrToInt(string str){constint len = str.length();if(len ==0)return0;int i =0;while(i < len && str[i]==' '){++i;}// 排除开头的空格if(i == len)return0;if(!isdigit(str[i])&& str[i]!='+'&& str[i]!='-')return0;bool neg = str[i]=='-'?true:false;
i =isdigit(str[i])? i : i+1;longlong ans =0L;while(i < len &&isdigit(str[i])){
ans = ans *10+(str[i++]-'0');if(!neg && ans > INT_MAX){
ans = INT_MAX;break;}if(neg && ans >1L+ INT_MAX){
ans =1L+ INT_MAX;break;}}if(i != len)return0;// 不要此处,就是atoi()库函数的实现return!neg ?static_cast<int>(ans):static_cast<int>(-ans);}};