- 处理空字符串
- 忽略前置空格
- 保存符号
- 处理非法输入
- 处理溢出
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;
}
};