数値型

[C++] long型とstring型を相互変換する方法

C++でlong型とstring型を相互変換するには、標準ライブラリを使用します。

long型をstring型に変換するにはstd::to_string関数を使用します。

一方、string型をlong型に変換するにはstd::stol関数を使用します。

これらの関数は<string>ヘッダーに含まれており、簡潔かつ安全に変換を行えます。

long型をstring型に変換する方法

C++では、long型の数値をstring型に変換する方法はいくつかあります。

ここでは、std::to_string関数を使用した方法と、std::ostringstreamを使用した方法の2つを紹介します。

std::to_stringを使用する方法

std::to_string関数は、数値を文字列に変換するための簡単な方法です。

以下にそのサンプルコードを示します。

#include <iostream>
#include <string> // std::to_stringを使用するために必要
int main() {
    long number = 1234567890; // long型の数値
    std::string strNumber = std::to_string(number); // long型をstring型に変換
    std::cout << "long型の数値: " << number << std::endl; // long型の数値を出力
    std::cout << "string型に変換した結果: " << strNumber << std::endl; // 変換結果を出力
    return 0;
}
long型の数値: 1234567890
string型に変換した結果: 1234567890

この方法は非常にシンプルで、long型の数値を直接string型に変換できます。

std::ostringstreamを使用する方法

もう一つの方法は、std::ostringstreamを使用することです。

この方法は、より柔軟なフォーマットが可能です。

以下にそのサンプルコードを示します。

#include <iostream>
#include <sstream> // std::ostringstreamを使用するために必要
#include <string>
int main() {
    long number = 9876543210; // long型の数値
    std::ostringstream oss; // ostringstreamオブジェクトを作成
    oss << number; // long型の数値をostringstreamに挿入
    std::string strNumber = oss.str(); // string型に変換
    std::cout << "long型の数値: " << number << std::endl; // long型の数値を出力
    std::cout << "string型に変換した結果: " << strNumber << std::endl; // 変換結果を出力
    return 0;
}
long型の数値: 9876543210
string型に変換した結果: 9876543210

この方法では、ostringstreamを使用して数値を文字列に変換することができ、必要に応じてフォーマットを調整することも可能です。

string型をlong型に変換する方法

C++では、string型の文字列をlong型の数値に変換する方法がいくつかあります。

ここでは、std::stol関数を使用した方法と、std::istringstreamを使用した方法の2つを紹介します。

std::stolを使用する方法

std::stol関数は、文字列をlong型に変換するための簡単な方法です。

以下にそのサンプルコードを示します。

#include <iostream>
#include <string> // std::stolを使用するために必要
int main() {
    std::string strNumber = "1234567890"; // string型の数値
    long number = std::stol(strNumber); // string型をlong型に変換
    std::cout << "string型の数値: " << strNumber << std::endl; // string型の数値を出力
    std::cout << "long型に変換した結果: " << number << std::endl; // 変換結果を出力
    return 0;
}
string型の数値: 1234567890
long型に変換した結果: 1234567890

この方法は非常にシンプルで、string型の数値を直接long型に変換できます。

std::istringstreamを使用する方法

もう一つの方法は、std::istringstreamを使用することです。

この方法は、より柔軟な入力処理が可能です。

以下にそのサンプルコードを示します。

#include <iostream>
#include <sstream> // std::istringstreamを使用するために必要
#include <string>
int main() {
    std::string strNumber = "9876543210"; // string型の数値
    std::istringstream iss(strNumber); // istringstreamオブジェクトを作成
    long number; // long型の変数を宣言
    iss >> number; // string型をlong型に変換
    std::cout << "string型の数値: " << strNumber << std::endl; // string型の数値を出力
    std::cout << "long型に変換した結果: " << number << std::endl; // 変換結果を出力
    return 0;
}
string型の数値: 9876543210
long型に変換した結果: 9876543210

この方法では、istringstreamを使用して文字列をlong型に変換することができ、必要に応じて他のデータ型への変換も行うことができます。

例外処理とエラーハンドリング

C++でlong型とstring型の相互変換を行う際には、例外処理やエラーハンドリングが重要です。

特に、変換時に無効な文字列が与えられた場合や、範囲外の値が指定された場合には、適切な対処が必要です。

ここでは、std::stolstd::to_stringを使用した場合のエラーハンドリングについて説明します。

std::stolの例外処理

std::stol関数は、変換に失敗した場合にstd::invalid_argumentstd::out_of_rangeの例外をスローします。

これらの例外をキャッチして、エラーメッセージを表示する方法を示します。

#include <iostream>
#include <string> // std::stolを使用するために必要
int main() {
    std::string strNumber = "abc"; // 無効な文字列
    try {
        long number = std::stol(strNumber); // string型をlong型に変換
        std::cout << "long型に変換した結果: " << number << std::endl; // 変換結果を出力
    } catch (const std::invalid_argument& e) {
        std::cerr << "エラー: 無効な引数です。" << std::endl; // 無効な引数のエラーメッセージ
    } catch (const std::out_of_range& e) {
        std::cerr << "エラー: 値が範囲外です。" << std::endl; // 範囲外のエラーメッセージ
    }
    return 0;
}
エラー: 無効な引数です。

このように、std::stolを使用する際には、例外処理を行うことで、無効な入力に対して適切に対処できます。

std::to_stringのエラーハンドリング

std::to_string関数は、通常、long型の数値をstring型に変換する際にエラーをスローすることはありません。

しかし、数値が非常に大きい場合には、変換が失敗する可能性があります。

以下のように、範囲をチェックすることでエラーハンドリングを行うことができます。

#include <iostream>
#include <string> // std::to_stringを使用するために必要
#include <limits> // std::numeric_limitsを使用するために必要
int main() {
    long number = std::numeric_limits<long>::max(); // long型の最大値
    if (number < 0) {
        std::cerr << "エラー: 負の数は変換できません。" << std::endl; // 負の数のエラーメッセージ
    } else {
        std::string strNumber = std::to_string(number); // long型をstring型に変換
        std::cout << "string型に変換した結果: " << strNumber << std::endl; // 変換結果を出力
    }
    return 0;
}
string型に変換した結果: 9223372036854775807

このように、std::to_stringを使用する際には、数値の範囲を確認することで、エラーを未然に防ぐことができます。

高度な使用例と応用

C++におけるlong型とstring型の相互変換は、基本的な操作だけでなく、さまざまな応用が可能です。

ここでは、複数の数値を一度に変換する方法や、ユーザー入力を処理する方法、さらにはカスタムフォーマットを使用した変換の例を紹介します。

複数の数値を一度に変換する方法

複数のlong型の数値をstring型に変換する場合、ループを使用して一括変換することができます。

以下にそのサンプルコードを示します。

#include <iostream>
#include <string> // std::to_stringを使用するために必要
#include <vector> // std::vectorを使用するために必要
int main() {
    std::vector<long> numbers = {123, 456, 789}; // long型の数値のベクター
    std::vector<std::string> strNumbers; // string型の数値を格納するベクター
    for (long number : numbers) {
        strNumbers.push_back(std::to_string(number)); // long型をstring型に変換して追加
    }
    // 変換結果を出力
    for (const std::string& strNumber : strNumbers) {
        std::cout << "string型に変換した結果: " << strNumber << std::endl;
    }
    return 0;
}
string型に変換した結果: 123
string型に変換した結果: 456
string型に変換した結果: 789

この方法では、std::vectorを使用して複数の数値を効率的に変換できます。

ユーザー入力を処理する方法

ユーザーからの入力を受け取り、その入力をstring型からlong型に変換する方法も重要です。

以下にそのサンプルコードを示します。

#include <iostream>
#include <string> // std::stolを使用するために必要
int main() {
    std::string userInput; // ユーザー入力を格納するstring型の変数
    std::cout << "数値を入力してください: ";
    std::getline(std::cin, userInput); // ユーザーからの入力を取得
    try {
        long number = std::stol(userInput); // string型をlong型に変換
        std::cout << "入力された数値: " << number << std::endl; // 変換結果を出力
    } catch (const std::invalid_argument& e) {
        std::cerr << "エラー: 無効な引数です。" << std::endl; // 無効な引数のエラーメッセージ
    } catch (const std::out_of_range& e) {
        std::cerr << "エラー: 値が範囲外です。" << std::endl; // 範囲外のエラーメッセージ
    }
    return 0;
}

このコードでは、ユーザーからの入力を受け取り、適切に変換を行います。

無効な入力に対しては例外処理を行い、エラーメッセージを表示します。

カスタムフォーマットを使用した変換

特定のフォーマットで数値を文字列に変換したい場合、std::ostringstreamを使用することで、フォーマットを自由に設定できます。

以下にそのサンプルコードを示します。

#include <iostream>
#include <sstream> // std::ostringstreamを使用するために必要
#include <string>
int main() {
    long number = 123456789; // long型の数値
    std::ostringstream oss; // ostringstreamオブジェクトを作成
    // カスタムフォーマットで数値を文字列に変換
    oss << "数値: " << number << " (十進数)"; // フォーマットを指定
    std::string formattedString = oss.str(); // string型に変換
    std::cout << formattedString << std::endl; // フォーマットされた文字列を出力
    return 0;
}
数値: 123456789 (十進数)

この方法では、数値を特定のフォーマットで文字列に変換することができ、表示内容をカスタマイズできます。

これにより、ユーザーにとってわかりやすい出力が可能になります。

まとめ

この記事では、C++におけるlong型とstring型の相互変換の方法について詳しく解説しました。

具体的には、std::to_stringstd::stolを用いた基本的な変換方法から、複数の数値を一度に処理する方法、ユーザー入力の取り扱い、さらにはカスタムフォーマットを使用した変換の応用例まで幅広く取り上げました。

これらの知識を活用して、実際のプログラムにおけるデータの変換処理をより効率的に行うことができるでしょう。

今後は、これらの技術を実際のプロジェクトに取り入れ、さらなるスキル向上を目指してみてください。

関連記事

Back to top button