【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 <stdio.h>
#include <string>

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;

    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("%s\n",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("数値:%s\n", 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("%s\n", numStr);

    return 0;
}

実行結果:

数値:04321

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

【C言語入門】printfで文字列を表示(sprintfの使い方も解説)
更新日 : 2019年5月6日

まとめ

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

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

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

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

MoritaIssei

ご閲覧いただきありがとうございます。森田一世と申します。プログラマーとしてRaspberry piを使ったり、記事を作成しています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説