※ stringクラスは、
正確には、basic_stringという名のテンプレートクラスを、
8ビット文字列を扱うようにインスタンス化したクラスである。
日本語などのワイド文字(2バイト以上で表現される文字)での扱いを必要とする
文字列については、wstringクラスを用いるが、ここでは説明しない。
C++言語で文字列を扱う際は、C言語と同様の方式を用いてもよいが、
この stringクラスを使って扱う方がいろいろと便利なことが多い。
例えば、C言語の文字列では常に文字型配列の長さに注意を払わなければなら
ないが、stringクラスでは格納する文字列の長さに応じて必要な
記憶域の大きさを自動的に調整してくれる。
また、文字列の最後に'\0'を付け忘れてプログラムが思った通りに動かないと
いう事態も避けられる。
さらに、C言語の文字列では文字列のコピーや連結、内容の比較といった操作
は文字列操作ライブラリを呼び出して行なっていたが、
stringクラスでは演算子を用いるだけで簡単に実現できる。
string s("cat"); // 初期値付き文字列 string s2; // 空の文字列 s2 = "dog"; // 文字列の代入 s = s2; // 文字列のコピー s2 = s1 + " and cat"; // 文字列の連結 s2 += " and mouse"; // 文字列の連結(追加) if (s == s2) // 文字列の比較 cout << "equal" << endl;
具体的な使用例を以下に示す。
1 : // 2 : // string test 3 : // 4 : #include <iostream> 5 : #include <string> // stringを使用する 6 : using namespace std; 7 : 8 : // 2つの文字列を比較して結果を表示する関数 9 : void compare_string(string s, string s2) 10 : { 11 : cout << "\ncompare_string:" << endl; 12 : cout << "s=" << s << " s2=" << s2 << endl; 13 : if (s == s2) // 比較演算子 (文字列の比較) 14 : cout << "two strings are equal" << endl; 15 : else 16 : cout << "two strings are not equal" << endl; 17 : 18 : } 19 : 20 : int main() 21 : { 22 : string s("one"); // "one"という内容を持つ文字列 23 : string s2; // 空の文字列 24 : 25 : cout << "s=" << s << endl; 26 : 27 : s2 = s; // s2に sを代入 28 : s2 += " two"; // s2の後ろに " two"を連結 29 : s = "zero " + s; // sの前に "zero "を連結 30 : 31 : cout << "s=" << s << endl; 32 : cout << "s2=" << s2 << endl; 33 : 34 : string s3, s4; 35 : s3 = "foo"; 36 : s4 = "foo"; 37 : compare_string(s3, s4); 38 : 39 : s4 = "bar"; 40 : compare_string(s3, s4); 41 : 42 : return 0; 43 : }
stringクラスを使用する場合には、stringをインクルードする
必要がある。
上記サンプルコードでは、5行目で stringをインクルードしている。
実行結果は以下の通りになる。
s=one s=zero one s2=one two compare_string: s=foo s2=foo two strings are equal compare_string: s=foo s2=bar two strings are not equal