本文へスキップ
BecomeCoder

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

std::string の基本 ― 使いやすい文字列

ブラウザで完結

導入

第5章では文字列char配列(C文字列)で扱いました。サイズを自分で決め、終端の \0 に気をつける必要がありました。モダンな C++ では、もっと安全で便利な std::string を使います。

説明

<string> を include すると string 型が使えます。長さの心配なく代入・連結でき、+ でそのままつなげます。== で内容を比較できるのも大きな利点です。

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

int main() {
    string name = "Become";
    name = name + "Coder";       // + で連結(配列サイズの心配が不要)
    name += "!";                 // += で末尾に追加
    cout << name << endl;        // BecomeCoder!

    if (name == "BecomeCoder!") {  // == で内容を比較できる
        cout << "一致" << endl;
    }
    return 0;
}

C文字列(char 配列)と std::string の違いを図にすると、次のイメージです。

flowchart TB
  subgraph OLD["char 配列(C文字列)"]
    o["サイズを自分で決める<br/>末尾の終端記号 0 に注意<br/>連結は strcat・比較は strcmp"]
  end
  subgraph NEW["std::string(モダン)"]
    n["長さは自動管理<br/>+ で連結・== で比較<br/>.length や .substr が使える"]
  end
  OLD -->|"より安全・便利に"| NEW

string は「長さ」を自分の中に持っているので、いつでも .length()(または .size())で取り出せます。空かどうかは .empty() で分かります。

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

int main() {
    string s = "Hello";
    cout << s.length() << endl;   // 5
    cout << s.empty() << endl;    // 0(空でない → false)

    string t;                     // 空文字列
    cout << t.empty() << endl;    // 1(空 → true)
    return 0;
}

まとめ

新しく C++ を書くときは、特別な理由がなければ C文字列ではなく std::string を使います。安全で読みやすく、間違いが減ります。次のレッスンでは文字列を「操作する」メソッドを見ていきます。

実際に動かしてみよう

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

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

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