C++ 文字列

C++ には、次の2種類の文字列表現が用意されています:

  • C スタイル文字列
  • C++ で導入された string クラス型

C スタイル文字列

C スタイルの文字列は C 言語に由来し、C++ でも引き続きサポートされています。文字列は実際にはnull文字\0で終わる1次元の文字配列です。したがって、null で終わる文字列には、その文字列を構成する文字が含まれます。

次の宣言と初期化は、あるサンプル文字列を作成します。配列の末尾に空文字が格納されているため、文字配列のサイズは単語サンプルの文字数より1つ多くなります。

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

配列の初期化規則に従って、上記の文は次のように書くこともできます:

char site[] = "サンプル";

以下は、C/C++ で定義されている文字列のメモリ表現です:

C/C++ 中的字符串表示

実は、あなたはnull文字を文字列定数の末尾に置く必要はありません。C++ コンパイラは配列を初期化するときに、自動的に\0を文字列の末尾に置きます。

例

#include <iostream> using namespace std; int main () { char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; cout << "サンプル:"; cout << site << endl; return 0; }

上記のコードをコンパイルして実行すると、次の結果が生成されます:

サンプル: サンプル

C++ には、null で終わる文字列を操作するための関数が多数あります:

番号関数 & 目的
1strcpy(s1, s2);
文字列 s2 を文字列 s1 にコピーします。
2strcat(s1, s2);
文字列 s2 を文字列 s1 の末尾に連結します。文字列の連結には++ 記号も使用できます。例:
string str1 = "サンプル";
string str2 = "google";
string str = str1 + str2;
3strlen(s1);
文字列 s1 の長さを返します。
4strcmp(s1, s2);
s1 と s2 が同じ場合は 0 を返します。s1<s2 の場合は 0 より小さい値を返し、s1>s2 の場合は 0 より大きい値を返します。
5strchr(s1, ch);
文字列 s1 内の文字 ch が最初に現れる位置を指すポインタを返します。
6strstr(s1, s2);
文字列 s1 内の文字列 s2 が最初に現れる位置を指すポインタを返します。

以下の例では、上記の関数の一部を使用しています:

例

#include <iostream> #include <cstring> using namespace std; int main () { char str1[13] = "サンプル"; char str2[13] = "google"; char str3[13]; int len ; // str1 を str3 にコピー strcpy( str3, str1); cout << "strcpy( str3, str1) : " << str3 << endl; // str1 と str2 を連結 strcat( str1, str2); cout << "strcat( str1, str2): " << str1 << endl; // 連結後の str1 の合計長 len = strlen(str1); cout << "strlen(str1) : " << len << endl; return 0; }

上記のコードをコンパイルして実行すると、次の結果が生成されます:

strcpy( str3, str1) : サンプル
strcat( str1, str2): サンプルgoogle
strlen(str1) : 12

C++ の String クラス

C++ 標準ライブラリはstringクラス型を提供し、上記のすべての操作をサポートするほか、さらに多くの機能も追加されています。この C++ 標準ライブラリのクラスを学習します。まず、次の例を見てみましょう:

まだこの例を完全に理解できていないかもしれません。これまでのところ、クラスとオブジェクトについて説明していないためです。そのため、今はこの例をざっと見るだけで構いません。オブジェクト指向の概念を理解した後に、もう一度この例に戻って理解してください。

例

#include <iostream> #include <string> using namespace std; int main () { string str1 = "サンプル"; string str2 = "google"; string str3; int len ; // str1 を str3 にコピー str3 = str1; cout << "str3 : " << str3 << endl; // str1 と str2 を連結 str3 = str1 + str2; cout << "str1 + str2 : " << str3 << endl; // 連結後の str3 の合計長 len = str3.size(); cout << "str3.size() : " << len << endl; return 0; }

上記のコードをコンパイルして実行すると、次の結果が生成されます:

str3 : サンプル
str1 + str2 : サンプルgoogle
str3.size() :  12
その他の拡張