今回は、int型⇔文字列(string型)に変換する方法について解説していきます。
この記事では、
- 文字列⇔int型に変換とは
- 文字列からint型に変換
- int型から文字列に変換
- 0埋めで文字列に変換する
などの基本的内容から、応用的な使い方についても解説します。
文字列⇔int型に変換とは
文字列⇔int型に変換というのは、整数で書かれた文字列からint型の数値に変換したり、逆にint型の数値を文字列に変換したりすることです。
C++では、文字列を扱うためにstring型やchar*型があり、int型に変換するためにはいくつか方法があります。
実際のプログラムでは、txtファイルの文字列から数値に変換するときなどに使われます。ただし、string型を扱うためには、stringというライブラリを使う必要があります。
また、いくつかの関数では、char*型から数値に変換する必要があるため、string型のstrという変数に対して、
char* c_str = str.c_str();
のようにして、char*型の文字列を得る必要があります。
文字列からint型に変換
まず文字列をint型に変換する方法について解説していきます。
atoiを使ってstring型からint型に変換
atoi関数を使うと、char*型からint型に変換することができます。
#include <stdio.h>
#include <string>
int main() {
std::string numStr = "1234";
int num = atoi(numStr.c_str());
printf("数値:%dn", num);
return 0;
}
実行結果:
数値:1234
sstreamを使ってstring型からint型に変換
istringstreamを使うと、string型をint型に変換することができます。
istringstreamを使うためには、sstreamというライブラリをインクルードする必要があります。
例えば、istringstream型のssという変数を宣言するには、
std::istringstream ss;
文字列をセットするときには、
ss =std::istringstream("1234");
数値を取り出すときには、
int num;
ss >> num;
のように使います。
#include <stdio.h>
#include <string>
#include <sstream>
int main(void) {
std::string numStr = "1234";
std::istringstream ss;
ss = std::istringstream(numStr);
int num = atoi(numStr.c_str());
ss >> num;
printf("数値:%dn", num);
return 0;
}
実行結果:
数値:1234
sscanfを使ってstring型からint型に変換
sscanf関数を使うことで、指定した形式で、char*型からint型に変換することができます。sscanf関数を使うには、stdio.hをインクルードする必要があります。
例えば、文字列からint型を取り出したいときは、以下のようになります。
sscanf(文字列,"%d",&数値);
これを使うことで、文字列から数値のみを取り出すこともできます。
例として、"数値:"の後の数値を取り出す時のコードを見ていきます。
#include <stdio.h>
#include <string>
int main(void) {
std::string numStr = "数値:1234";
int num;
printf("numStr:n%snn", numStr.c_str());
sscanf(numStr.c_str(), "数値:%d", &num);
printf("%dn", num);
return 0;
}
実行結果:
numStr:
数値:1234
1234
stoiを使ってstring型からint型に変換
stoi関数を使うと、string型を受け取って、int型に変換したものを出力します。
#include <stdio.h>
#include <string>
int main() {
std::string numStr = "1234";
int num;
num = stoi(numStr);
printf("数値:%dn", num);
return 0;
}
実行結果:
数値:1234
int型から文字列に変換
次に、int型から文字列に変換する方法について見ていきましょう。
sprintfを使ってint型からstring型に変換
sprintf関数を使うことで、様々な書式で、int型を文字列に変換することができます。
sprintf関数を使うときには、stdio.hというライブラリをインクルードする必要があります。
また、sprintf関数はchar*型を引数として取るため、string型は使うことができません。
例として、int型の値の前に、"数値:"をつけて表示するコードを見ていきます。
#include <stdio.h>
#include <string>
int main() {
char *numStr;
int num = 4321;
sprintf(numStr, "数値:%d", num);
printf("%sn", numStr);
return 0;
}
実行結果:
数値:4321
sstreamを使ってint型からstring型に変換
ostringstreamを使うと、int型をセットした後、string型として取り出すことができます。
sstreamというライブラリをインクルードすることで使うことができます。
宣言するには、
std::ostringstream oss;
int型をセットするには、
oss << 100;
string型を取得するには、
oss.str();
のように使います。
例として、"数値:"のあとに、数値を出力するプログラムを見てみましょう。
#include <stdio.h>
#include <string>
#include <sstream>
int main() {
std::ostringstream oss;
int num = 4321;
oss << "数値:" << num;
printf("%sn",oss.str().c_str());
return 0;
}
実行結果:
数値:4321
to_stringを使ってint型からstring型に変換
to_string関数を使うことでもint型からstring型に変換することができます。
#include <stdio.h>
#include <string>
int main() {
std::string str;
int num = 4321;
str = std::to_string(num);
printf("数値:%sn", str.c_str());
return 0;
}
実行結果:
数値:4321
sprintfで0埋めで文字列に変換
sprintf関数を使うと0埋めなどで表示を整えることができます。
5桁で0埋めをするときには、
sprintf(文字列,"%05d",数値);
のようにして使います。
例として5桁未満の時は0で埋めるプログラムをみていきましょう。
#include <stdio.h>
#include <string>
int main() {
char *numStr;
int num = 4321;
sprintf(numStr, "数値:%05d", num);
printf("%sn", numStr);
return 0;
}
実行結果:
数値:04321
そのほか空白で埋める場合など詳しくはこちらをご覧ください。
【C言語入門】printfで文字列を表示(sprintfの使い方も解説)
更新日 : 2020年6月29日
まとめ
いかがだったでしょうか?
今回はint型⇔文字列に変換する方法を解説しました。int型から文字列に変換したいときや、文字列からint型の数値を取り出したいときに使用してください。
もし、int型から文字列に変換する方法を忘れてしまったらこの記事を確認してください。