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++ で定義されている文字列のメモリ表現です:
実は、あなたは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 で終わる文字列を操作するための関数が多数あります:
| 番号 | 関数 & 目的 |
|---|---|
| 1 | strcpy(s1, s2); 文字列 s2 を文字列 s1 にコピーします。 |
| 2 | strcat(s1, s2); 文字列 s2 を文字列 s1 の末尾に連結します。文字列の連結には++ 記号も使用できます。例: string str1 = "サンプル"; string str2 = "google"; string str = str1 + str2; |
| 3 | strlen(s1); 文字列 s1 の長さを返します。 |
| 4 | strcmp(s1, s2); s1 と s2 が同じ場合は 0 を返します。s1<s2 の場合は 0 より小さい値を返し、s1>s2 の場合は 0 より大きい値を返します。 |
| 5 | strchr(s1, ch); 文字列 s1 内の文字 ch が最初に現れる位置を指すポインタを返します。 |
| 6 | strstr(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その他の拡張