原文: String to Int in C++ – How to Convert a String to an Integer Example

C++ でコードを書いていると、あるデータ型を別のデータ型に変換したくなる場面がよく出てくることでしょう。

この記事では C++ を使って文字列を整数に変換する方法について、もっとも良く使われる方法を 2 つ取り上げて学んでいきます。

では、さっそく始めましょう!

C++ のデータ型

プログラミング言語 C++ には、事前に定義されたデータ型 (ビルトインデータタイプ) がいくつかあります。

  • int は整数のための型 (例: 10, 150)
  • double は浮動小数点数のための型 (例: 5.0, 4.5)
  • char は単一の文字のための型 (例:  'D', '!')
  • string は連続した文字のための型 (例: "Hello")
  • bool は真偽値のための型 (true または false)

C++ は非常に強く型付けされたプログラミング言語です。そのため、変数を用意する時には、その変数にどんな型の値が格納されるかを明確に示す必要があります。

C++ における int 型の変数の宣言と初期化の方法


C++ で int 型の変数を宣言するには、まずはじめに変数のデータ型を記述します。この場合は int です。型が宣言されることで、コンパイラは、その変数にどのような値が格納されるかを知ることができます。これにより、その変数がどのような動作ができるか決まります。

次に、変数の名前を渡します。

最後に、ステートメントの末尾にセミコロンを添えることをお忘れなく!

#include <iostream>

int main() {
    int age;
}

作成した変数に対して、次のように値を設定できます。

#include <iostream>

int main() {
    int age;
    age = 28;
}

これらの宣言と値の設定を別々に分けて行う代わりに、変数の初期化 (initializing) によって、同時に設定することもできます。その上で、最終的に結果を出力する例がこちらです。

// 情報を出力するための関数 (cout) と入力するための関数 (cin) を
// 利用できるようにするヘッダーファイル
#include <iostream>

// 名前空間の宣言
// これにより std:: プレフィックスを付ける必要がなくなります。
// (std::cout ではなく cout として呼びだせます)
using namespace std;

int main() { // プログラムのメイン関数 - ここから
    int age = 28;
    // 変数の初期化
    // 初期化により、変数の型や名前、値を一度に設定しています。

    // コンソールへの出力
    // << を連結 (チェーン) して実行し、"My age is 28" と出力します。
    cout << "My age is: " << age << endl;
} // メイン関数 - ここまで

C++ における string 型の変数の宣言と初期化の方法

文字列 (string) は 1 つ 1 つの文字の集まりです。

C++ での文字列の宣言は、上記のセクションで紹介した int の宣言と初期化の方法と非常によく似ています。

string クラスは C++ の標準ライブラリで提供されています。文字列型を扱うためには、ファイルの先頭で #include <iostream> に続いて <string> ヘッダーライブラリを含める必要があります。

ヘッダーファイルを読み込ませた後、先ほどのコードと同様に using namespace std; を追加します。

この行を追加すれば、文字列の変数を作成する際に std::string を指定せずに string だけで済むようになります。

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 文字列の変数を宣言

    string greeting;
    greeting = "Hello";
    // `=` は代入演算子です。変数に対して値を設定しています。
}

または、このように変数の宣言と初期化を同時に行い、コンソールに結果を出力することもできます。

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 変数の初期化

    string greeting = "Hello";

   // コンソールに "Hello" と出力
   cout << greeting << endl;
}

文字列を整数に変換する方法

はじめに説明した通り、C++ は強く型付けされた言語です。

データ型に合わない値を渡そうとすると、エラーが発生します。

また double から int へは型キャストを用いて簡単に変換ができますが、文字列から整数への変換はそう簡単にはいきません。

例えば、このようなことはできません。

#include <iostream>
#include <string>
using namespace std;

int main() {
   string str = "7";
   int num;

   num = (int) str;
}

コンパイル時に、以下のようなエラーが発生するでしょう。

hellp.cpp:9:10: error: no matching conversion for C-style cast from 'std::__1::string' (aka
      'basic_string<char, char_traits<char>, allocator<char> >') to 'int'
   num = (int) str;
         ^~~~~~~~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/string:875:5: note: candidate function
    operator __self_view() const _NOEXCEPT { return __self_view(data(), size()); }
    ^
1 error generated.

文字列を int 型に変換する方法はいくつかあります。この後のセクションで、そのうち 2 つをご紹介します。

stoi() 関数を使って文字列を整数に変換する方法

文字列型のオブジェクトを数値に変換する効果的な方法の 1 つに stoi() 関数を使う方法があります。

この方法は、新しいバージョンの C++ で良く使われる方法です。C++ 11 から導入されています。

入力値として文字列を受け取り、出力には整数としての値を返します。

#include <iostream>
#include <string>
using namespace std;

int main() {
   // 文字列の変数 str
   string str = "7";
   // コンソールに出力
   cout << "I am a string " << str << endl;

   // 文字列の変数 str の値を整数の値に変換
   // 新しい値は num という変数名の新しい変数に格納
   int num = stoi(str);

   // コンソールに出力
   cout << "I am an int " << num << endl;
}

出力結果はこのようになります。

I am a string 7
I am an int 7

stringstream クラスを使って文字列を整数に変換する方法

stringstream クラスは、より古いバージョンの C++ でよく使われる方法です。文字列に対して入出力を行うことで変換を実施します。

このクラスを利用するために、まず sstream ライブラリを読み込ませます。プログラムの先頭に #include <sstream> を追加します。

次に stringstream クラスのオブジェクトを作ります。このオブジェクトは、整数に変換したい文字列の値を保持します。そして、文字列を整数に変換する過程でも利用されます。

<< 演算子を使って、文字列の変数から値を取り出します。

最後に >> 演算子を使って int 型の変数に、新たに変換した整数の値を入力します。

#include <iostream>
#include <string>
#include <sstream> // これで stringstream クラスが使えるようになります。

using namespace std;

int main() {
   // 文字列の入力 / 出力を扱うため、stringstream クラスのオブジェクトを作成
   stringstream ss;

   // データ型が string 型の変数 str
   string str = "7";

   // データ型がint 型の変数 num
   int num;

   // 変数 str に格納されている文字列を展開(文字列をストリームに入力)
   ss << str;

   // 変換された値を int 型の変数に渡す
   ss >> num;

   // コンソール上に出力
   cout << num << endl; // 整数の 7 が出力される
}

まとめ

これで変換ができましたね!C++ で文字列を整数に変換する簡単な方法を 2 つ学びました。

C++ プログラミング言語について、もっと学んでみたい方は freeCodeCamp YouTube チャンネルにある全 4 時間の動画講座をご覧ください。(編集チームより: 日本語版の動画もあります。)

記事を読んでくださってありがとうございます。楽しく学んでいきましょう😊