實現 int myAtoi(string str),模擬標準庫 atoi 行為,需處理:
INT_MIN ~ INT_MAX)
int myAtoi(string str) {
if (str.empty()) return 0;
int i = 0, n = str.size();
// 1. 跳過前導空格
while (i < n && str[i] == ' ') ++i;
if (i == n) return 0;
// 2. 符號
bool neg = false;
if (str[i] == '+' || str[i] == '-') {
neg = (str[i] == '-');
++i;
}
// 3. 解析數字
long long val = 0; // 用 long long 暫存防溢出
while (i < n && isdigit(str[i])) {
val = val * 10 + (str[i] - '0');
if (!neg && val > INT_MAX) return INT_MAX;
if (neg && -val < INT_MIN) return INT_MIN;
++i;
}
return neg ? -val : val;
}
"4193 with words" → 4193。"words 987" → 0。| 輸入 | 輸出 | 說明 |
|---|---|---|
"42" | 42 | 正常 |
" -42" | -42 | 前導空格+負號 |
"4193 with words" | 4193 | 非數字截斷 |
"words and 987" | 0 | 無有效數字 |
"-91283472332" | -2147483648 | 下溢鉗制 |
"+1" | 1 | 顯式正號 |