きっかけ
そろそろC++ str to intで調べるのがいやになってきたので、記事に残しておきます。C++のcharクラス・stringクラスとintクラス・その他の数値クラスの相互変換のやり方のまとめです。
#早見表
今回のまとめです
| 元の型 | 変換したい型 | 方法 |
|---|---|---|
| string | 数値 | stox( ) ただしxは変換したい型によって変わる |
| char | int | int(c-'0') |
| 数値 | string | to_string( ) |
stox()関数の詳細です
| 型 | 変換する関数 |
|---|---|
| int | stoi |
| long long | stoll |
| double | stod |
| float | stof |
| long | stol |
| long double | stold |
| unsigned long | stoul |
| unsigned long long | stoull |
#string to int
string型からint型に変換したい時はstoi()関数を使う。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[]){
string S = "123";
int N = stoi(S);
cout<<"num:"<<N<<" type:"<<typeid(N).name()<<endl;
}
出力は次のようになる。型がintだとiと出力されるらしい。詳しくはC++11のtypeinfoについてを参照。
num:123 type:i
stringから任意の数値型に変換する関数は次の通り。よく使う順。
| 型 | 変換する関数 |
|---|---|
| int | stoi |
| long long | stoll |
| doulbe | stod |
| float | stof |
| long | stol |
| long double | stold |
| unsigned long | stoul |
| unsigned long long | stoull |
#char to int
stringの文字を1文字ずつ取得してintに変換したい時がある。しかし、stoi()はchar型に対応していない。char型をint型に変換するには、文字コードの引き算を行う必要がある。他にやり方は見つからなかった。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[]){
string S = "456";
for(int i=0;i<3;i++){
int N = int(S[i]-'0');
cout<<"num:"<<N<<" type:"<<typeid(N).name()<<endl;
}
}
出力は次のようになる。
num:4 type:i
num:5 type:i
num:6 type:i
#int to string
数値型をstring型にしたい時はto_string()関数を使う。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[]){
int N = 789;
string S = to_string(N);
cout<<"str:"<<S<<" type:"<<typeid(S).name()<<endl;
}
出力は次のようになる。多分コンパイラのせいかバージョンのせいで、stringのtypeinfo.name()がうまく働いていないが、basic_stringという文字があるのでちゃんとstringになっているはずである。
str:789 type:NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
#まとめ
C++ 文字列 数値と調べなくてもよくなりそうです。
| 元の型 | 変換したい型 | 方法 |
|---|---|---|
| string | 数値 | stox( ) ただしxは変換したい型によって変わる |
| char | int | int(c-'0') |
| 数値 | string | to_string( ) |