C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++での文字列から整数(atoi)


最初の非空白文字に到達するまで、必要な数の空白文字を最初に破棄するモジュールを設計する必要があるとします。その後、この文字から始めて、オプションの最初のプラス記号またはマイナス記号の後に数字がいくつも続き、それらを数値として解釈します。

str内の非空白文字の最初のシーケンスが有効な整数でない場合、またはstrが空であるか空白のみが含まれているためにそのようなシーケンスが存在しない場合、変換は実行されません。

したがって、入力が「-45」の場合、出力は-45になります。

これを解決するには、次の手順に従います-

  • sign:=1、base:=0、i:=0、n:=文字列のサイズs
  • i
  • 最初の文字が–の場合は、記号:=-1、それ以外の場合は記号:=1
  • s[i]が「0」から「9」の範囲にある間
    • 各文字を読み取り、整数に変換してから、各文字のベースを増やしてベース計算を調整します。
  • 番号*記号を返す
例(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

  1. C++で整数を16進文字列に変換します

    このプログラムでは、整数を16進文字列に変換する方法を説明します。整数を16進文字列に変換するには、数学的な手順に従います。しかし、この場合、簡単なトリックを使用してこの問題を解決しました。 C / C ++には、フォーマット指定子%Xがあります。ある変数の値を16進形式で出力します。このフォーマット指定子を使用して、sprintf()関数を使用して数値を文字列に変換しました。 Input: An integer number 255 Output: FF アルゴリズム Step 1:Take a number from the user Step 2: Make a string afte

  2. C ++で文字列をトークン化しますか?

    最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() {    string str("Hello from the dark side");    string tmp; // A string