数値型

[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::stoistd::to_stringを使用する際には、変換が失敗する可能性があるため、適切なエラーハンドリングを行う必要があります。

ここでは、std::stoiを使用した場合の例外処理と、std::istringstreamを使用した場合のエラーチェックについて説明します。

std::stoiを使用した場合の例外処理

std::stoi関数は、変換に失敗した場合にstd::invalid_argumentstd::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_stringstd::stoiを使用した変換方法、エラー処理や例外対応の重要性、さらには実践的な使用例を通じて、これらの技術がどのように役立つかを紹介しました。

これを機に、実際のプログラムにおいて型変換を適切に活用し、エラーハンドリングを行うことで、より堅牢なコードを書くことに挑戦してみてください。

関連記事

Back to top button