1. 如果输入不合法,输出0
2. 正负判断
3. 溢出输出INT_MAX or INT_MIN
4. 忽略最后的字母
代码还是比较简洁的,一次AC
bool isDigit(char c){
return c >= '0' && c <= '9';
}
int atoi(const char *str) {
bool neg = false;
long long ans = 0;
const int n = strlen(str);
int i = 0;
int valid_digit = 0;
while(i < n && str[i] == ' ')
i++;
// plus or negative
if(str[i] == '+' || str[i] == '-'){
if(str[i] == '-')
neg = true;
i++;
}
while(i < n && isDigit(str[i])){
ans *= 10;
ans += (int) (str[i] - '0');
i++;
valid_digit++;
if(valid_digit >= 11)
break;
}
if(neg)
ans = -ans;
if(ans > INT_MAX)
return INT_MAX;
if(ans < INT_MIN)
return INT_MIN;
return ans;
}