實現 atoi:忽略前導空格,可選正負號,盡可能讀取數字,非數字字符停止解析。溢出返回 INT_MAX (2147483647) 或 INT_MIN (-2147483648)。無效輸入返回 0。
num > INT_MAX/10 或 num == INT_MAX/10 且 digit > INT_MAX%10。
class Solution {
public:
int atoi(const char* str) {
int num = 0, sign = 1;
const int n = strlen(str);
int i = 0;
while (i < n && str[i] == ' ') ++i;
if (i < n && str[i] == '+') ++i;
else if (i < n && str[i] == '-') { sign = -1; ++i; }
for (; i < n; ++i) {
if (str[i] < '0' || str[i] > '9') break;
if (num > INT_MAX/10 || (num == INT_MAX/10 && (str[i]-'0') > INT_MAX%10))
return sign == -1 ? INT_MIN : INT_MAX;
num = num * 10 + (str[i] - '0');
}
return num * sign;
}
};
itoa(整數轉字串)常考。