- 处理空字符串
- 忽略前置空格
- 保存符号
- 处理非法输入
- 处理溢出
class Solution { public: int atoi(const char *str) { //处理遇到空串得情况。 if(strlen(str)==0) return 0; int idx = 0, sign = 1, val =0;//idx是全局索引 //处理前面有一堆0得情况 while(str[idx]==' ') ++idx;//返回就是那个没有空字符串得索引(技巧)。 //记录符号(并行就行了。不可能同时出现+-)(就算下面indx++也没事)(有正号,负号,或者没有符号) if(str[idx]=='-') {sign = -1; idx++;} if(str[idx]=='+') {sign = 1; idx++;} for(;idx<strlen(str);idx++){ // 4. 处理非法值(可以字串层面取比较) if(str[idx]>'9') break; //5. 处理溢出 //在下次输入时,/10是在int32 范围内还能进行比较。如果等于整除,要看下一个数是否是大于INT32_MAX 最后 //一个数,如果是就返回,依据符号,最大正,最小负。 if(val> INT32_MAX/10 || ( val==INT32_MAX /10 && INT32_MAX % 10 < str[idx]-'0') ) return sign==1? INT32_MAX : INT32_MIN; val = val*10 + str[idx] - '0';//加和 } return sign*val; } };