std:: stoi, std:: stol, std:: stoll
|
ヘッダーで定義
<string>
|
||
|
int
stoi
(
const
std::
string
&
str,
std:: size_t * pos = nullptr, int base = 10 ) ; |
(1) | (C++11以降) |
|
int
stoi
(
const
std::
wstring
&
str,
std:: size_t * pos = nullptr, int base = 10 ) ; |
(2) | (C++11以降) |
|
long
stol
(
const
std::
string
&
str,
std:: size_t * pos = nullptr, int base = 10 ) ; |
(3) | (C++11以降) |
|
long
stol
(
const
std::
wstring
&
str,
std:: size_t * pos = nullptr, int base = 10 ) ; |
(4) | (C++11以降) |
|
long
long
stoll
(
const
std::
string
&
str,
std:: size_t * pos = nullptr, int base = 10 ) ; |
(5) | (C++11以降) |
|
long
long
stoll
(
const
std::
wstring
&
str,
std:: size_t * pos = nullptr, int base = 10 ) ; |
(6) | (C++11以降) |
文字列 str 内の符号付き整数値を解釈します。
ptr を、変換関数内部の char * (1,3,5) 型または wchar_t * (2,4,6) 型の内部ポインタとする。
空白文字(
std::isspace
を呼び出すことで識別される)を最初の非空白文字が見つかるまで破棄し、その後有効な
base-n
(n=
base
の場合)整数数値表現を形成するために可能な限りの文字を取得し、それらを整数値に変換します。有効な整数値は以下の部分で構成されます:
- (オプション) プラスまたはマイナス記号
-
(オプション)
8進数を示す接頭辞 (
0) (基数が 8 または 0 の場合のみ適用) -
(オプション)
16進数を示す接頭辞 (
0xまたは0X) (基数が 16 または 0 の場合のみ適用) - 数字のシーケンス
基数として有効な値の集合は
{0, 2, 3, ..., 36}
です。基数
2
の整数で有効な数字の集合は
{0, 1}
、基数
3
の整数では
{0, 1, 2}
となります。これ以降も同様です。
10
より大きい基数の場合、有効な数字には英字が含まれ、基数
11
の整数では
Aa
から始まり、基数
36
の整数では
Zz
までとなります。文字の大文字・小文字は区別されません。
現在インストールされているC locale によって、追加の数値フォーマットが受け入れられる場合があります。
base
の値が
0
の場合、数値の基数は自動検出されます:プレフィックスが
0
の場合は8進数、プレフィックスが
0x
または
0X
の場合は16進数、それ以外の場合は10進数となります。
マイナス記号が入力シーケンスの一部であった場合、数字のシーケンスから計算された数値は、結果の型における 単項マイナス による場合と同様に否定されます。
pos が null ポインタでない場合、 ptr は str. c_str ( ) 内の最初の未変換文字のアドレスを受け取り、その文字のインデックスが計算されて * pos に格納され、変換によって処理された文字数が示されます。
目次 |
パラメータ
| str | - | 変換対象の文字列 |
| pos | - | 処理された文字数を格納する整数のアドレス |
| base | - | 基数 |
戻り値
str の内容に対応する整数値。
例外
- std::invalid_argument 変換が実行できない場合。
- std::out_of_range 変換後の値が結果型の範囲外となる場合、または基盤となる関数( std::strtol または std::strtoll )が errno を ERANGE に設定した場合。
例
#include <iomanip> #include <iostream> #include <stdexcept> #include <string> #include <utility> int main() { const auto data = { "45", "+45", " -45", "3.14159", "31337 with words", "words and 2", "12345678901", }; for (const std::string s : data) { std::size_t pos{}; try { std::cout << "std::stoi(" << std::quoted(s) << "): "; const int i{std::stoi(s, &pos)}; std::cout << i << "; pos: " << pos << '\n'; } catch (std::invalid_argument const& ex) { std::cout << "std::invalid_argument::what(): " << ex.what() << '\n'; } catch (std::out_of_range const& ex) { std::cout << "std::out_of_range::what(): " << ex.what() << '\n'; const long long ll{std::stoll(s, &pos)}; std::cout << "std::stoll(" << std::quoted(s) << "): " << ll << "; pos: " << pos << '\n'; } } std::cout << "\nCalling with different radixes:\n"; for (const auto& [s, base] : {std::pair<const char*, int> {"11", 2}, {"22", 3}, {"33", 4}, {"77", 8}, {"99", 10}, {"FF", 16}, {"jJ", 20}, {"Zz", 36}}) { const int i{std::stoi(s, nullptr, base)}; std::cout << "std::stoi(" << std::quoted(s) << ", nullptr, " << base << "): " << i << '\n'; } }
出力例:
std::stoi("45"): 45; pos: 2
std::stoi("+45"): 45; pos: 3
std::stoi(" -45"): -45; pos: 4
std::stoi("3.14159"): 3; pos: 1
std::stoi("31337 with words"): 31337; pos: 5
std::stoi("words and 2"): std::invalid_argument::what(): stoi
std::stoi("12345678901"): std::out_of_range::what(): stoi
std::stoll("12345678901"): 12345678901; pos: 11
Calling with different radixes:
std::stoi("11", nullptr, 2): 3
std::stoi("22", nullptr, 3): 8
std::stoi("33", nullptr, 4): 15
std::stoi("77", nullptr, 8): 63
std::stoi("99", nullptr, 10): 99
std::stoi("FF", nullptr, 16): 255
std::stoi("jJ", nullptr, 20): 399
std::stoi("Zz", nullptr, 36): 1295
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2009 | C++11 |
std::out_of_range
はスローされなかった、もし
std::strtol または std::strtoll が errno を ERANGE に設定した場合 |
スローされる |
関連項目
|
(C++11)
(C++11)
|
文字列を符号なし整数に変換する
(関数) |
|
(C++11)
(C++11)
(C++11)
|
文字列を浮動小数点値に変換する
(関数) |
|
(C++11)
|
バイト文字列を整数値に変換する
(関数) |
|
(C++11)
|
バイト文字列を符号なし整数値に変換する
(関数) |
|
(C++11)
(C++11)
|
バイト文字列を
std::intmax_t
または
std::uintmax_t
に変換する
(関数) |
|
(C++17)
|
文字シーケンスを整数または浮動小数点値に変換する
(関数) |
|
(C++11)
|
バイト文字列を整数値に変換する
(関数) |
|
(C++11)
|
整数値または浮動小数点値を
string
に変換する
(関数) |
|
(C++11)
|
整数値または浮動小数点値を
wstring
に変換する
(関数) |