【C++言語】文字列を整数に変換する4つの方法
はじめに
C++で文字列を整数に変換する方法は、初心者にとって少し難しく感じることがあるかもしれません。文字列を整数に変換する場面は多く、ユーザーからの入力を処理したり、ファイルからのデータを処理したりするときに役立ちます。この記事では、C++で文字列を整数に変換するための代表的な方法をいくつか紹介し、各方法の使い方を詳しく解説します。
方法1: std::stoiを使う
最も簡単で直感的な方法は、C++標準ライブラリのstd::stoiを使用する方法です。この関数は、文字列を整数に変換するために使用できます。関数の名前は「string to integer」の略で、簡単に文字列から整数への変換ができます。
std::stoiの基本的な使い方は以下の通りです。
#include
#include
int main() {
std::string str = "12345";
int num = std::stoi(str);
std::cout << "整数に変換した結果: " << num << std::endl;
return 0;
}
このプログラムは、文字列「12345」を整数に変換し、結果として「12345」を表示します。std::stoiは、文字列に数値が含まれている限り、整数として変換します。
文字列が数値として解釈できない場合、std::stoiは例外を投げます。例えば、文字列が「abc」のような数字以外の文字を含んでいる場合、実行時にエラーが発生します。
方法2: std::stringstreamを使う
std::stringstreamは、文字列と数値を相互に変換するために使用できるストリームクラスです。この方法では、文字列をstringstream
オブジェクトに読み込ませ、整数として取り出すことができます。
以下のコード例は、std::stringstreamを使って文字列を整数に変換する方法を示しています。
#include
#include
#include
int main() {
std::string str = "67890";
std::stringstream ss(str);
int num;
ss >> num;
std::cout << "整数に変換した結果: " << num << std::endl;
return 0;
}
この方法では、文字列「67890」をstringstream
に読み込ませ、その後整数として変換しています。ストリームから整数を取り出すには、>>
演算子を使用します。
std::stringstreamは例外を投げないので、文字列が不正な場合には、変換に失敗して数値が0になることがあります。これを防ぐためには、ストリームが正しく数値を取り出せたかをチェックする必要があります。
方法3: atoiを使う
C++の古い方法として、atoi(文字列を整数に変換するCの関数)を使うことができます。これは、整数に変換できる文字列を指定すると、整数を返します。atoiは標準ライブラリの一部であり、C++でも利用可能です。
以下に、atoiを使った例を示します。
#include
#include // atoiのために必要
int main() {
const char* str = "54321";
int num = std::atoi(str);
std::cout << "整数に変換した結果: " << num << std::endl;
return 0;
}
このコードでは、文字列「54321」を整数に変換しています。atoiは、数値の部分だけを取り出して変換し、数値以外の文字列の場合は0を返します。そのため、文字列が数字以外のものを含んでいる場合、結果として0が返されることに注意が必要です。
方法4: C++17のstd::from_charsを使う
C++17では、std::from_charsという新しい関数が追加されました。この関数は、文字列を高速に整数に変換するためのものです。std::from_charsは、標準ライブラリに含まれ、低レベルで効率的に動作します。
以下は、std::from_charsを使用した例です。
#include
#include // from_charsのために必要
int main() {
std::string str = "98765";
int num;
std::from_chars(str.data(), str.data() + str.size(), num);
std::cout << "整数に変換した結果: " << num << std::endl;
return 0;
}
この関数は、文字列の範囲を指定して整数に変換します。std::from_charsは、非常に効率的で、パフォーマンスが重要な場面で有用です。なお、この関数もstd::stoi
やatoi
のように変換できない場合にはエラーが発生しませんが、変換の結果をチェックする方法があります。
エラーチェック
文字列から整数への変換時には、エラーチェックを行うことが重要です。変換が失敗した場合、予期しない動作を避けるために適切な処理を行いましょう。例えば、std::stoiの場合、変換が失敗すると例外std::invalid_argument
やstd::out_of_range
がスローされます。
#include
#include
int main() {
std::string str = "abc123"; // 数字以外の文字が含まれている
try {
int num = std::stoi(str);
std::cout << "整数に変換した結果: " << num << std::endl;
} catch (const std::invalid_argument& e) {
std::cout << "無効な引数が含まれています: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cout << "範囲外の値です: " << e.what() << std::endl;
}
return 0;
}
上記の例では、文字列に数字以外の文字が含まれているため、std::invalid_argument例外が発生します。このようにして、エラー発生時に適切なメッセージを表示し、プログラムを安定させることができます。