最終更新:2026-10-12
C++ string から int への変換¶
個人 WeChat 公式アカウント:

まず解決策を挙げます:
- atoi
- strtol
- stoi
これらにはどのような違いがあるのでしょうか?以下でテストして比較します。
C 言語スタイルの関数
atoi と strtol の比較:
出力:
この2つの関数はどちらも、文字列の先頭から数字や正負号、小数点を探し始め、不正な文字に遭遇すると終了します。
したがって、上記の s の文字の時点で出力されず、そこで終了します。つまり、文字列が数字でない場合、あるいは小数点などの数字以外の文字を含む場合でも、例外は発生しません!そのまま 0 を出力します。
例えば:
出力:
strtol は atoi と比べて、複数の進数の変換をサポートしています。例えば8進数などです。
例えば:
C++ スタイル
C++ では stoi を使って int に変換できます。この関数の前の2つと比べた最大の特徴は:例外です!
C++ は C 言語と比べて例外が追加されていることを私たちは知っています。これもこの関数が C++ において持つ最も顕著な機能です。
例えば:
string str1 = "asq,";
// int c = stoi(str1); // 报异常
string str2 = "12312";
int c = stoi(str2); // ok
cout << c << endl;
例外は次の通りです:
カスタム実装
つまり自分で書くということです。次の通りです:
int stringToInt(const string &s) {
int v;
stringstream ss;
ss << s;
ss >> v;
return v;
}
int main() {
int i = stringToInt("2.3");
cout<<i<<endl;
}
関連トピック¶
- Bazel で C++ プロジェクトをビルド | C++那些事
- Bazel と LLDB の連携デバッグ | C++那些事
- CMake 入門と実践 | C++那些事
- Conan C++ パッケージ管理入門 | C++那些事
- C++ Insights によるコンパイル期観察 | C++那些事
- C++ Jupyter Notebook インタラクティブ | C++那些事
- C++ dbg-macro デバッグマクロ | C++那些事
- GCC コンパイルオプション詳解 | C++那些事
- GDB で C++ プログラムをデバッグ | C++那些事
- GDB Python 拡張デバッグ | C++那些事