實現 C++ atoi:忽略前導空格,識別正負號,解析數字直到非數字字符,處理 32 位有符號整數溢出([-2^31, 2^31-1])。
int myAtoi(string str) {
int i = 0, n = str.size(), sign = 1;
long long result = 0; // 用長整型檢測溢出
while (i < n && str[i] == ' ') i++; // 跳過空格
if (i < n && (str[i] == '+' || str[i] == '-'))
sign = (str[i++] == '-') ? -1 : 1; // 處理符號
while (i < n && isdigit(str[i])) {
result = result * 10 + (str[i++] - '0');
if (sign == 1 && result > INT_MAX) return INT_MAX;
if (sign == -1 && -result < INT_MIN) return INT_MIN;
}
return sign * result;
}
"+-12" → 0(首個非空格非數字非符號即停止)result > INT_MAX/10,或加位後檢查"123abc" → 123"000123" → 123"42" → 42;" -42" → -42;"4193 with words" → 4193;"words and 987" → 0;"-91283472332" → -2147483648
使用 long long 避免中間運算溢出;合併溢出檢查邏輯;isdigit 替代手動範圍判斷。
