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;
}
このコードでは、文字列str
をstd::stoll
関数を使用してlong long int型の数値num
に変換しています。変換が成功した場合、変換された数値が出力されます。変換が失敗した場合(つまり、入力文字列が数値に変換できない場合や変換した数値がlong long int型の範囲を超える場合)、適切なエラーメッセージが出力されます。
このように、std::stoll
関数を使用することで、文字列をlong long int型の数値に安全に変換することができます。次のセクションでは、エラーハンドリングについて詳しく説明します。
エラーハンドリング
std::stoll
関数は、文字列をlong long int型の数値に変換する際に、2つの例外をスローする可能性があります:std::invalid_argument
とstd::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! 🚀