C++で文字列をint(整数)に変換・解析する方法をわかりやすく解説
C++で文字列をint型(整数)に変換する方法は主に2つあります。1つは文字列ストリーム(stringstream)を使う古典的な方法、もう1つはC++11で導入されたstoi関数などの標準関数を使う方法です。それぞれの使い方と特徴を詳しく見ていきましょう。
方法1:stringstreamを使って文字列をintに変換する
stringstreamを利用すると、文字列をあたかも入力ストリームのように扱い、int型に解析(パース)できます。ただし、この方法では変換が失敗した場合のエラーチェックを自分で行う必要がある点に注意してください。
コード例
#include<iostream>
#include<sstream>
using namespace std;
int str_to_int(const string &str) {
stringstream ss(str);
int num;
ss >> num;
return num;
}
int main() {
string s = "12345";
int x = str_to_int(s);
cout << x;
}実行結果
12345
stringstreamを使う方法は柔軟性が高い反面、変換に失敗しても例外が発生しないため、ss.fail()などで成否を確認するエラー処理を組み込むのが安全です。
方法2:C++11のstoi関数を使う(推奨)
C++11以降では、文字列を数値に変換するための専用関数が標準ライブラリに追加されました。用途に応じて以下の関数を使い分けられます。
- stoi:string → int
- stol:string → long
- stoll:string → long long
- stoul:string → unsigned long
コード例
これらの関数は次のようにシンプルに使えます。
#include<iostream>
using namespace std;
int main() {
string s = "12345";
int x = stoi(s);
cout << x;
}実行結果
12345
stoi関数のエラー処理について
stoi系の関数は、変換が失敗した場合に例外をスローする点がstringstreamとの大きな違いです。
- 数値として解釈できない文字列の場合:
std::invalid_argument例外が発生 - int型の範囲を超える値の場合:
std::out_of_range例外が発生
そのため、ユーザー入力など信頼できない文字列を変換する際は、try-catchで例外を捕捉するのがベストプラクティスです。
#include<iostream>
#include<string>
using namespace std;
int main() {
string s = "12345";
try {
int x = stoi(s);
cout << x;
} catch (const invalid_argument& e) {
cout << "数値に変換できません";
} catch (const out_of_range& e) {
cout << "値が範囲外です";
}
}まとめ
手軽さと安全性を重視するなら、C++11以降のstoi関数を使うのがおすすめです。古いコンパイラ環境や細かい制御が必要な場合には、stringstreamによる変換が有効です。用途に応じて使い分けましょう。
-
AndroidでJSON文字列を解析(パース)する方法をわかりやすく解説
AndroidでJSON文字列を解析する方法この記事では、AndroidアプリでJSON文字列を解析(パース)する方法を、サンプルコード付きで段階的に解説します。JSONObjectやJSONArrayクラスを使えば、JSON形式のデータから必要な値を簡単に取り出すことができます。手順1:新しいプロジェクトを作成するまず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な情報を入力してプロジェクトを作成してください。手順2:レイアウトファイル(activity_main.xml)を編集する次に、res/layout
-
Pythonで文字列をint・floatに変換する方法をわかりやすく解説
Pythonでは、ユーザー入力やファイル読み込みなどで取得した数値は、多くの場合文字列(str型)として扱われます。そのままでは計算に使えないため、int() や float() を使って数値型へ変換(パース)する必要があります。ここでは、変換に失敗した場合に備えた例外処理(try-except)を組み合わせた、安全な変換方法を紹介します。文字列をint(整数)に変換する整数を表す文字列をint型に変換するには、int() 関数を使用します。変換できない文字列が渡されると ValueError が発生するため、try-exceptで捕捉しておくと安心です。try: &nb