[C++] int型とstring型を相互に変換する方法
C++では、int
型とstring
型の相互変換は以下の方法で行えます。
int
からstring
への変換にはstd::to_string
関数を使用します。
一方、string
からint
への変換にはstd::stoi
関数を使用します。
例えば、int num = 123;
をstring
に変換する場合はstd::to_string(num)
を使用し、string str = "456";
をint
に変換する場合はstd::stoi(str)
を使用します。
これらはC++11以降で利用可能です。
int型からstring型への変換方法
C++では、整数型(int)を文字列型(string)に変換する方法はいくつかあります。
ここでは、主にstd::to_string
関数を使用した方法と、std::ostringstream
を使用した方法を紹介します。
std::to_stringを使用する方法
std::to_string
関数は、整数を簡単に文字列に変換するための便利な関数です。
以下にその使用例を示します。
#include <iostream>
#include <string> // std::to_stringを使用するために必要
int main() {
int number = 123; // 整数型の変数
std::string strNumber = std::to_string(number); // int型からstring型に変換
std::cout << "整数を文字列に変換: " << strNumber << std::endl; // 結果を出力
return 0;
}
整数を文字列に変換: 123
この方法は非常にシンプルで、可読性も高いです。
std::to_string
は、他の数値型(floatやdoubleなど)にも対応しています。
std::ostringstreamを使用する方法
もう一つの方法は、std::ostringstream
を使用することです。
この方法は、より柔軟なフォーマットが可能です。
以下にその使用例を示します。
#include <iostream>
#include <sstream> // std::ostringstreamを使用するために必要
int main() {
int number = 456; // 整数型の変数
std::ostringstream oss; // ostringstreamオブジェクトを作成
oss << number; // int型をostringstreamに挿入
std::string strNumber = oss.str(); // string型に変換
std::cout << "整数を文字列に変換: " << strNumber << std::endl; // 結果を出力
return 0;
}
整数を文字列に変換: 456
この方法は、複数のデータ型を同時に文字列に変換したり、特定のフォーマットで出力したりする際に便利です。
string型からint型への変換方法
C++では、文字列型(string)を整数型(int)に変換する方法もいくつかあります。
ここでは、主にstd::stoi
関数を使用した方法と、std::istringstream
を使用した方法を紹介します。
std::stoiを使用する方法
std::stoi
関数は、文字列を整数に変換するための便利な関数です。
以下にその使用例を示します。
#include <iostream>
#include <string> // std::stoiを使用するために必要
int main() {
std::string strNumber = "789"; // 文字列型の変数
int number = std::stoi(strNumber); // string型からint型に変換
std::cout << "文字列を整数に変換: " << number << std::endl; // 結果を出力
return 0;
}
文字列を整数に変換: 789
この方法は非常にシンプルで、エラーチェックも行うことができます。
std::stoi
は、変換に失敗した場合に例外をスローします。
std::istringstreamを使用する方法
もう一つの方法は、std::istringstream
を使用することです。
この方法は、より柔軟なデータの読み込みが可能です。
以下にその使用例を示します。
#include <iostream>
#include <sstream> // std::istringstreamを使用するために必要
int main() {
std::string strNumber = "1234"; // 文字列型の変数
std::istringstream iss(strNumber); // istringstreamオブジェクトを作成
int number; // 整数型の変数
iss >> number; // string型をint型に変換
std::cout << "文字列を整数に変換: " << number << std::endl; // 結果を出力
return 0;
}
文字列を整数に変換: 1234
この方法は、複数のデータを一度に読み込む際や、特定のフォーマットでの変換が必要な場合に便利です。
エラー処理と例外対応
C++での型変換において、エラー処理や例外対応は非常に重要です。
特に、std::stoi
やstd::to_string
を使用する際には、変換が失敗する可能性があるため、適切なエラーハンドリングを行う必要があります。
ここでは、std::stoi
を使用した場合の例外処理と、std::istringstream
を使用した場合のエラーチェックについて説明します。
std::stoiを使用した場合の例外処理
std::stoi
関数は、変換に失敗した場合にstd::invalid_argument
やstd::out_of_range
の例外をスローします。
これらの例外をキャッチして、エラー処理を行う方法を示します。
#include <iostream>
#include <string> // std::stoiを使用するために必要
int main() {
std::string strNumber = "abc"; // 整数に変換できない文字列
try {
int number = std::stoi(strNumber); // 変換を試みる
std::cout << "文字列を整数に変換: " << number << 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;
}
無効な引数: stoi: no conversion
このように、例外をキャッチすることで、プログラムがクラッシュすることを防ぎ、適切なエラーメッセージを表示することができます。
std::istringstreamを使用した場合のエラーチェック
std::istringstream
を使用する場合、変換が成功したかどうかを確認するために、ストリームの状態をチェックすることができます。
以下にその例を示します。
#include <iostream>
#include <sstream> // std::istringstreamを使用するために必要
int main() {
std::string strNumber = "123abc"; // 整数に変換できない文字列
std::istringstream iss(strNumber); // istringstreamオブジェクトを作成
int number; // 整数型の変数
iss >> number; // string型をint型に変換
if (iss.fail()) { // 変換が失敗した場合
std::cout << "変換に失敗しました。" << std::endl; // エラーメッセージを出力
} else {
std::cout << "文字列を整数に変換: " << number << std::endl; // 結果を出力
}
return 0;
}
変換に失敗しました。
この方法では、ストリームの状態を確認することで、変換が成功したかどうかを判断できます。
エラー処理を適切に行うことで、プログラムの信頼性を向上させることができます。
実践的な使用例
C++におけるint型とstring型の相互変換は、さまざまな実践的なシナリオで役立ちます。
ここでは、ユーザーからの入力を受け取り、その入力を整数として処理する例と、整数を文字列としてフォーマットして出力する例を紹介します。
ユーザー入力を整数として処理する例
ユーザーからの入力を受け取り、その入力を整数に変換して計算を行うプログラムの例です。
エラーハンドリングも含めています。
#include <iostream>
#include <string> // std::stoiを使用するために必要
int main() {
std::string userInput; // ユーザー入力を格納する変数
std::cout << "整数を入力してください: ";
std::getline(std::cin, userInput); // ユーザーからの入力を取得
try {
int number = std::stoi(userInput); // string型からint型に変換
int result = number * 2; // 入力された整数を2倍にする
std::cout << "入力された整数の2倍: " << result << 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;
}
整数を入力してください: 5
入力された整数の2倍: 10
このプログラムでは、ユーザーからの入力を受け取り、それを整数に変換して計算を行っています。
無効な入力に対しては適切なエラーメッセージを表示します。
整数を文字列としてフォーマットして出力する例
次に、整数を文字列としてフォーマットし、特定の形式で出力する例を示します。
ここでは、std::ostringstream
を使用して、整数をカンマ区切りの形式で表示します。
#include <iostream>
#include <sstream> // std::ostringstreamを使用するために必要
std::string formatNumber(int number) {
std::ostringstream oss; // ostringstreamオブジェクトを作成
oss << number; // 整数を挿入
std::string strNumber = oss.str(); // string型に変換
// カンマ区切りの形式に変換
int len = strNumber.length();
for (int i = len - 3; i > 0; i -= 3) {
strNumber.insert(i, ",");
}
return strNumber; // フォーマットされた文字列を返す
}
int main() {
int number = 1234567; // 整数型の変数
std::string formattedNumber = formatNumber(number); // フォーマットを適用
std::cout << "フォーマットされた数値: " << formattedNumber << std::endl; // 結果を出力
return 0;
}
フォーマットされた数値: 1,234,567
このプログラムでは、整数をカンマ区切りの形式で表示するための関数を定義しています。
std::ostringstream
を使用して整数を文字列に変換し、さらにカンマを挿入してフォーマットしています。
これにより、数値を見やすく表示することができます。
まとめ
この記事では、C++におけるint型とstring型の相互変換方法について詳しく解説しました。
具体的には、std::to_string
やstd::stoi
を使用した変換方法、エラー処理や例外対応の重要性、さらには実践的な使用例を通じて、これらの技術がどのように役立つかを紹介しました。
これを機に、実際のプログラムにおいて型変換を適切に活用し、エラーハンドリングを行うことで、より堅牢なコードを書くことに挑戦してみてください。