目次
はじめに
C++の**std::string
**クラスは、C言語スタイルのchar
配列が抱える煩雑さや危険性を解消し、文字列を安全で直感的に扱えるように設計されています。まるでint
やdouble
のような基本データ型のように、自然な構文で様々な操作が可能です。
この記事では、std::string
を使いこなす上で必須となる、以下の4つの基本的な操作方法を、サンプルコードと共にまとめて解説します。
- 入出力:
cin
/cout
- 代入:
=
- 連結:
+
- 比較:
==
,!=
,<
,>
など
1. 入出力
std::string
オブジェクトは、標準入出力ストリーム (cin
, cout
) と >>
/ <<
演算子を使って、簡単に入出力できます。
サンプルコード
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "名前を入力してください: ";
cin >> name; // スペースまでを読み取る
cout << "こんにちは、" << name << "さん!" << endl;
return 0;
}
2. 代入
=
(代入演算子)を使って、string
オブジェクトに新しい文字列を設定したり、他のstring
オブジェクトの内容をコピーしたりできます。
サンプルコード
#include <iostream>
#include <string>
#include <utility> // move
using namespace std;
int main() {
string text1;
text1 = "Hello"; // 文字列リテラルを代入
string text2 = text1; // text1の内容をtext2にコピー
string temp_text = "World";
string text3 = move(temp_text); // C++11以降: ムーブ代入
cout << "text1: " << text1 << endl;
cout << "text2: " << text2 << endl;
cout << "text3: " << text3 << endl;
return 0;
}
3. 連結
+
(加算演算子)や +=
(複合代入演算子)を使って、文字列同士を簡単に連結できます。
サンプルコード
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Modern";
string str2 = " C++";
// + 演算子で連結
string combined = str1 + str2; // -> "Modern C++"
// 文字列リテラルやcharとも連結可能
combined = combined + " is powerful.";
// += 演算子で追記
combined += "!!";
cout << combined << endl;
return 0;
}
4. 比較
比較演算子(==
, !=
, <
, >
, <=
, >=
)を使って、string
オブジェクト同士の辞書順での比較ができます。
サンプルコード
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1 = "apple";
string s2 = "orange";
string s3 = "apple";
cout << boolalpha; // boolをtrue/falseで表示
cout << s1 << " == " << s3 << " -> " << (s1 == s3) << endl; // true
cout << s1 << " != " << s2 << " -> " << (s1 != s2) << endl; // true
cout << s1 << " < " << s2 << " -> " << (s1 < s2) << endl; // true (辞書順で 'a' < 'o')
return 0;
}
解説: 文字列の比較は、先頭の文字から順に、文字コードの大小で辞書的に行われます。
まとめ
今回は、C++のstd::string
における、最も基本的な4つの操作(入出力、代入、連結、比較)を解説しました。std::string
は、これらの演算子が適切にオーバーロードされているため、組み込みの数値型とほとんど変わらない、直感的でシンプルな構文で文字列を安全に扱うことができます。