需要考虑的情况
1 字符串本身是否为空或者长度为0 直接返回0
2 字符串前面和后面是否有空格
3 字符串数字开始之前是否有正负号
4 判断每个字符是否是有效字符
5 判断中间或者是最后的结果是否越界
大概也就这些需要注意的,其他的也没有什么了。
(PS.没有考虑到是否有小数点,以及是否用科学计数法来进行表示)
int myatoi(string str) { //为空判断 if(str.size()==0) return 0; //起始位置 int start_string = 0; while(str[start_string] == ' ') { start_string++; } //结束位置 int end_string = str.size()-1; while(str[end_string] == ' ') { end_string--; } cout << start_string << " " << end_string << endl; //正负判断 bool positive = true; if(str[start_string] == '-') { positive = false; start_string++; }else if(str[start_string] == '+') { start_string++; } //开始正式计算 int res = 0; for(int i=start_string; i<=end_string; ++i) { int ele = str[i] - '0'; //每个元素判断 if(ele > 9 || ele <0) break; //正数的情况下 if(positive) { res = res * 10 + ele; //判断是否溢出 if(res > 0x7fffffff) return 0x7fffffff; } else { res = res * 10 - ele; //判断负数是否溢出 if(res < 0x80000000) return 0x80000000; } } return (int)res; }