C++11から文字列から数値への変換の標準ライブラリとして、std::stoi
が存在します。
std::stoi
ではC言語のatoi
などと違いstd::string
をそのまま取り扱うことができます。
例外
- 変換できない形式の文字列が指定された =>
std::invalid_argument
- 範囲外の値が指定された =>
std::out_of_range
実装例
使用例
# include <iostream>
# include <string>
# include <stdexcept>
int main(int argc, char* argv[]) {
for (int i = 1; i < argc; ++i) {
try {
int num = std::stoi(argv[i]);
std::cout << "[" << i << "]: " << num << std::endl;
}
catch (const std::invalid_argument& e) {
std::cout << "[" << i << "]: " << "invalid argument" << std::endl;
}
catch (const std::out_of_range& e) {
std::cout << "[" << i << "]: " << "out of range" << std::endl;
}
}
return 0;
}
実行例
$ g++ -std=gnu++11 test.cpp && ./a.out 1 a 2147483647 2147483648
[1] : 1
[2] : invalid argument
[3] : 2147483647
[4] : out of range
その他の型に変換する
その他、long
, float
, double
向けなどに、std::stol
, std::stof
, std::stod
が用意されています。