C++で文字列からlongへの変換

stoll関数の紹介

C++では、文字列をlong型に変換するためにstd::stoll関数を使用します。この関数は、stringクラスのメンバ関数ではなく、<string>ヘッダファイルに定義されている非メンバ関数です。

std::stoll関数のプロトタイプは以下の通りです:

long long int stoll (const string& str, size_t* idx = 0, int base = 10);

ここで、
strは変換したい文字列です。
idxはオプションの引数で、変換が終了した位置のインデックスを指すポインタです。
baseはオプションの引数で、数値の基数を指定します(デフォルトは10)。

この関数は、文字列strをlong long int型の数値に変換し、その数値を返します。変換できない場合は、std::invalid_argumentまたはstd::out_of_range例外をスローします。これにより、エラーハンドリングが可能になります。次のセクションでは、std::stoll関数の使用例とエラーハンドリングについて詳しく説明します。

stoll関数の使用例

以下に、std::stoll関数の基本的な使用例を示します。

#include <iostream>
#include <string>

int main() {
    std::string str = "123456789";
    long long int num;

    try {
        num = std::stoll(str);
        std::cout << "The number is: " << num << std::endl;
    } catch (std::invalid_argument const &e) {
        std::cout << "Bad input: std::invalid_argument thrown" << '\n';
    } catch (std::out_of_range const &e) {
        std::cout << "Integer overflow: std::out_of_range thrown" << '\n';
    }

    return 0;
}

このコードでは、文字列strstd::stoll関数を使用してlong long int型の数値numに変換しています。変換が成功した場合、変換された数値が出力されます。変換が失敗した場合(つまり、入力文字列が数値に変換できない場合や変換した数値がlong long int型の範囲を超える場合)、適切なエラーメッセージが出力されます。

このように、std::stoll関数を使用することで、文字列をlong long int型の数値に安全に変換することができます。次のセクションでは、エラーハンドリングについて詳しく説明します。

エラーハンドリング

std::stoll関数は、文字列をlong long int型の数値に変換する際に、2つの例外をスローする可能性があります:std::invalid_argumentstd::out_of_rangeです。

try {
    long long int num = std::stoll(str);
} catch (std::invalid_argument const &e) {
    // strが数値に変換できない場合にスローされます
    std::cout << "Bad input: std::invalid_argument thrown" << '\n';
} catch (std::out_of_range const &e) {
    // 変換した数値がlong long int型の範囲を超える場合にスローされます
    std::cout << "Integer overflow: std::out_of_range thrown" << '\n';
}
  • std::invalid_argument:この例外は、入力文字列が数値に変換できない場合にスローされます。たとえば、文字列が数値ではない文字を含んでいる場合や、基数が指定されているにもかかわらず、文字列がその基数の数値表現に適合しない場合などです。

  • std::out_of_range:この例外は、変換した数値がlong long int型の範囲を超える場合にスローされます。これは、文字列が非常に大きな数値を表現している場合に発生します。

これらの例外を適切にハンドリングすることで、std::stoll関数を安全に使用することができます。次のセクションでは、他の数値型への変換について説明します。

他の数値型への変換

C++では、std::stoll関数以外にも、様々な数値型への変換関数が提供されています。以下に、それらの関数をいくつか紹介します。

  • std::stoi:文字列をint型に変換します。
  • std::stol:文字列をlong型に変換します。
  • std::stoul:文字列をunsigned long型に変換します。
  • std::stoull:文字列をunsigned long long型に変換します。
  • std::stof:文字列をfloat型に変換します。
  • std::stod:文字列をdouble型に変換します。
  • std::stold:文字列をlong double型に変換します。

これらの関数は、std::stoll関数と同様に、文字列を指定した数値型に変換します。また、変換が失敗した場合には、std::invalid_argumentまたはstd::out_of_range例外をスローします。

以下に、std::stoi関数の使用例を示します。

#include <iostream>
#include <string>

int main() {
    std::string str = "12345";
    int num;

    try {
        num = std::stoi(str);
        std::cout << "The number is: " << num << std::endl;
    } catch (std::invalid_argument const &e) {
        std::cout << "Bad input: std::invalid_argument thrown" << '\n';
    } catch (std::out_of_range const &e) {
        std::cout << "Integer overflow: std::out_of_range thrown" << '\n';
    }

    return 0;
}

このように、C++では様々な数値型への変換関数が提供されており、それぞれの関数を適切に使用することで、文字列を任意の数値型に安全に変換することができます。ただし、各関数がスローする可能性のある例外に注意し、適切なエラーハンドリングを行うことが重要です。この記事が、C++での文字列から数値への変換についての理解を深めるのに役立つことを願っています。それでは、Happy Coding! 🚀

投稿者 dodo

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です