本文へスキップ
BecomeCoder

C++コース · 第7章 std::string ― 文字列を自在に扱う · レッスン30

文字列と数値の変換・入力 ― stoi と getline

ブラウザで完結

導入

ユーザー入力やファイルの中身は「文字列」で来ることが多く、それを数値に直したり、逆に数値を文字列にしたりする場面がよくあります。ここではその変換と、1行まるごと読む入力を学びます。

説明

文字列 → 数値は stoi(int)・stod(double)、数値 → 文字列は to_string を使います。

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

int main() {
    string a = "42";
    int n = stoi(a);              // 文字列 "42" → 数値 42
    cout << n * 2 << endl;        // 84

    double d = stod("3.14");      // 文字列 → double
    cout << d + 1 << endl;        // 4.14

    string s = to_string(100);    // 数値 → 文字列 "100"
    cout << "値は " + s << endl;  // 値は 100(+ で連結できる)
    return 0;
}

入力は、空白で区切って読む cin >> と、1行まるごと読む getline(cin, s) の使い分けが大切です。

flowchart TB
  in["入力: 東京 都"]
  in --> a["cin >> s;<br/>→ s = 東京(空白で止まる)"]
  in --> b["getline(cin, s);<br/>→ s = 東京 都(1行すべて)"]
#include <iostream>
#include <string>
using namespace std;

int main() {
    string line;
    getline(cin, line);           // 空白を含めて1行を読み込む
    cout << "入力: " << line << endl;
    return 0;
}

注意: cin >> n; の後に getline を使うと、残った改行を先に読んでしまい空行になることがあります。そのときは cin.ignore(); を1回はさみます。実務でよくハマるポイントです。

まとめ

stoi / stod / to_string で文字列と数値を行き来でき、getline で1行入力ができます。文字列は入出力の入口・出口で必ず使うので、ここを固めておくと後がラクになります。

実際に動かしてみよう

下のエディタにC++を書いて「コンパイル & 実行」を押すと、ブラウザ内で本物のC++コンパイラ(clang + libc++)がその場でコンパイルして実行し、出力が表示されます。std::string・vector・クラス・テンプレート・STL などモダンC++がそのまま動きます。本文の例を書き換えて試しながら進めましょう(初回だけコンパイラの読み込みに時間がかかります。以降はキャッシュされます。この回は標準入力(cin)は使わず、値はコードに直接書きます)。

C/C++ — ブラウザ内で本物のコンパイラで実行

ブラウザ内で本物のC/C++コンパイラ(clang + libc++ / WebAssembly)を動かします。構造体・malloc/free・std::string・vector・クラス・テンプレート・STL などがそのまま実行できます(初回のみコンパイラの読み込みに時間がかかります。以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。