class Solution { public: int atoi(const char *str) { int idx = 0, sign = 1, val = 0; if(strlen(str) == 0) return 0; while(str[idx] == ' ') ++idx; if(str[idx] == '-') {sign = -1; ++idx;} if(str[idx] == '+') {++idx;} for(; idx < strlen(str); ++idx){ if(str[idx] > '9') break; // 越界处理, 保证下一步val*10 + str[idx] - '0' 不能大于最大值 // 但是判断是时要分开判断,val*10 和 str[idx] - '0' 把数字尽量变小,防止越界 // val 大于 最大整数/10 越界,不能 val * 10 大于 最大整数, val * 10 会越界。 // 当 val 等于 最大值/10 时 判断剩下的str[idx] - '0' 是否大于 最大值%10,防止相加后会越界 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 val * sign; } };