C で文字列を int に変換する
文字列を int に変換することは、プログラミングの世界では繰り返し行われる作業です。単純なタスクであるにもかかわらず、多くのプログラマーはこれを実行中に失敗したり混乱したりします。変換は主に、文字列として保存されている数値に対して演算を実行できるようにするために行われます。
例:
str=163インチ
番号=163
C は厳密に型指定された言語です。データ型で受け入れられない値を入力しようとすると、エラーが発生します。入力だけでなく、操作の実行中にエラーが発生します。
文字列を int に変換するには、次の 3 つの方法があります。
- atoi( ) の使用 ループの使用 sscanf() の使用
1. atoi()による文字列変換
C の atoi() 関数は、文字配列または文字列リテラルを引数として受け取り、その値を 整数 。で定義されています。 ヘッダファイル。
観察すると 牽引() もう少し詳しく見ると、それが次のことを表していることがわかります。
atoi() の簡単な内訳
例:
C
// C program to demonstrate the> // functioning of the atoi() function> #include> #include> int> main()> {> > char> * str1 => '141'> ;> > char> * str2 => '3.14'> ;> > > // explicit type casting> > int> res1 => atoi> (str1);> > // explicit type casting> > int> res2 => atoi> (str2);> > > printf> (> 'atoi(%s) is %d
'> , str1, res1);> > printf> (> 'atoi(%s) is %d
'> , str2, res2);> > > return> 0;> }> |
出力
atoi(141) is 141 atoi(3.14) is 3
Atoi は文字列に対して少し異なる動作をします。方法を確認してみましょう:
例:
C
// C Program to implement> // Atoi function with char array> #include> #include> > int> main()> {> > char> * str1 => 'Geek 12345'> ;> > char> * str2 => '12345 Geek'> ;> > > int> num1 => atoi> (str1);> > int> num2 => atoi> (str2);> > > printf> (> '%d is of '%s'
'> , num1, str1);> > printf> (> '%d is of '%s'
'> , num2, str2);> > > return> 0;> }> |
出力
0 is of 'Geek 12345' 12345 is of '12345 Geek'
説明:
- Geek 12345 ここでは「Geek」が最初の単語なので、答えは次のようになります: 0 (数字なし)
- 12345 Geek ここでは「12345」が最初の単語なので、答えは次のようになります: 12345
2. ループの使用
ループを使用して、文字列の各要素を 1 つずつ走査し、数値文字を ASCII 値と比較して数値を取得し、整数を生成するための数学を使用することで、文字列を整数に変換できます。以下の例は、その方法を示しています。
例:
C
// C Program to convert string> // into integer using for loop> #include> #include> > int> main()> {> > char> * str => '4213'> ;> > int> num = 0;> > > // converting string to number> > for> (> int> i = 0; str[i] !=> ' '> ; i++) {> > num = num * 10 + (str[i] - 48);> > }> > > // at this point num contains the converted number> > printf> (> '%d
'> , num);> > return> 0;> }> |
出力
4213
注: 数値文字を数値に変換するために str[i] – 48 を使用しました。たとえば、文字「5」の ASCII 値は 53 なので、53 – 48 = 5 がその数値です。
3. sscanf() の使用
sscanf() を使用すると、文字列を整数に簡単に変換できます。この関数は、文字列からフォーマットされた入力を読み取ります。
sscanf の構文:
int sscanf (const char * source, const char * formatted_string, ...);
パラメーター :
- ソース – ソース文字列。 formatted_string – を含む文字列 フォーマット指定子 。 … : – 入力データを保存する変数のアドレスを含む変数引数リスト。
これらの引数は、少なくとも形式指定子によって格納される値の数と同じ数である必要があります。成功すると、関数は入力された変数の数を返します。入力失敗の場合、データが正常に読み込まれる前に EOF が返されます。
例:
C
// C program to demonstrate> // the working of SSCANF() to> // convert a string into a number> #include> > int> main()> {> > const> char> * str1 => '12345'> ;> > const> char> * str2 => '12345.54'> ;> > int> x;> > > // taking integer value using %d format specifier for> > // int> > sscanf> (str1,> '%d'> , &x);> > printf> (> 'The value of x : %d
'> , x);> > > float> y;> > // taking float value using %f format specifier for> > // float> > sscanf> (str2,> '%f'> , &y);> > printf> (> 'The value of x : %f
'> , y);> > > return> 0;> }> |
出力
The value of x : 12345 The value of x : 12345.540039
String を int に型キャストできますか?
答えは いいえ 。型キャストを使用して文字列を数値に変換すると、次の例に示すようにエラーが発生します。
例:
C
// C Program to check the output> // of typecasting from string to integer> #include> > int> main()> {> > string str => '8'> ;> > int> num;> > > // Typecasting> > num = (> int> )str;> > return> 0;> }> |
出力:
main.c: In function ‘main’: main.c:9:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 9 | num = (int)str; | ^ 1683652612
説明: 両方として string と int は同じオブジェクト階層にありません 、 私たちは 暗黙的または明示的な型キャストを実行できません double から int への変換、または float から int への変換の場合と同様です。
上記のコードでは、出力にガーベジ値が含まれた警告が表示されていることがわかります。したがって、そのような状況を回避するために、上記で指定した方法を使用します。