首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 8. String to Integer (atoi):C++完整實現與邊界處理

     編輯:關於C++

問題描述

實現 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;
}

關鍵邊界條件

  1. 空字符串/純空格:返回 0
  2. 多重符號:"+-12" → 0(首個非空格非數字非符號即停止)
  3. 溢出檢測:乘 10 前檢查 result > INT_MAX/10,或加位後檢查
  4. 非數字終止:"123abc" → 123
  5. 前導零:"000123" → 123

測試用例驗證

"42" → 42;" -42" → -42;"4193 with words" → 4193;"words and 987" → 0;"-91283472332" → -2147483648

優化建議

使用 long long 避免中間運算溢出;合併溢出檢查邏輯;isdigit 替代手動範圍判斷。

提交記錄 AC結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved