【C++入門】文字列⇔数値に変換する方法まとめ

今回は、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("数値:%d\n", 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("数値:%d\n", num);

    return 0;
}

実行結果:

数値:1234

sscanfを使ってstring型からint型に変換

sscanf関数を使うことで、指定した形式で、char*型からint型に変換することができます。sscanf関数を使うには、stdio.hをインクルードする必要があります。

例えば、文字列からint型を取り出したいときは、以下のようになります。

sscanf(文字列,"%d",&数値);

これを使うことで、文字列から数値のみを取り出すこともできます。

例として、”数値:”の後の数値を取り出す時のコードを見ていきます。

#include 
#include 

int main(void) {
    std::string numStr = "数値:1234";

    int num;

    printf("numStr:\n%s\n\n", numStr.c_str());

    sscanf(numStr.c_str(), "数値:%d", &num);

    printf("%d\n", 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("数値:%d\n", 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[256];

    int num = 4321;

    sprintf(numStr, "数値:%d", num);

    printf("%s\n", 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

そのほか空白で埋める場合など詳しくはこちらをご覧ください。

まとめ

いかがだったでしょうか?

今回はint型⇔文字列に変換する方法を解説しました。int型から文字列に変換したいときや、文字列からint型の数値を取り出したいときに使用してください。

もし、int型から文字列に変換する方法を忘れてしまったらこの記事を確認してください。

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次