C++中的字串轉整數 (atoi)


假設我們需要設計一個模組,該模組首先丟棄必要的空格字元,直到到達第一個非空格字元。之後,從這個字元開始,它接受一個可選的初始加號或減號,後跟儘可能多的數字,並將它們解釋為數值。

當str中的第一個非空格字元序列不是有效的整數,或者由於str為空或只包含空格而不存在這樣的序列時,將不會執行轉換。

因此,如果輸入類似於“-45”,則輸出將為-45。

為了解決這個問題,我們將遵循以下步驟:

  • sign := 1, base := 0, i := 0, n := 字串s的大小
  • 當i < n且s[i]為空格時,將i增加1
  • 如果第一個字元是“-”,則sign := -1,否則sign := 1
  • 當s[i]在'0'到'9'範圍內時
    • 讀取每個字元並將其轉換為整數,然後透過為每個字元增加base來調整base的計算。
  • 返回數字 * sign

示例 (C++)

讓我們來看下面的實現,以便更好地理解:

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int myAtoi(string str) {
      int sign = 1;
      int base = 0;
      int i = 0;
      int n = str.size();
      while(i < n && str[i] == ' '){
         i++;
      }
      if(str[i] == '-' || str[i] == '+') sign = 1 - 2*(str[i++] =='-');
      while(str[i] >= '0' && str[i] <='9'){
         if(base > INT_MAX/10 || base == INT_MAX/10 && str[i]- '0' > INT_MAX %10){
            if(sign == 1)return INT_MAX;
               return INT_MIN;
            }
            base = (base * 10) + (str[i++] - '0');
         }
         return base * sign;
   }
};
main(){
   Solution ob;
   cout << ob.myAtoi("-45")<<endl;
   cout << ob.myAtoi(" 56")<<endl;
   cout << ob.myAtoi("100")<<endl;
}

輸入

"-45"
" 56"
"100"

輸出

-45
56
100

更新於:2020年4月27日

613 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.