ストリングクラスにはgetlineというメンバがあります。
これを使うと問題が解消されます。
// string03.cpp #include <iostream> #include <string> using namespace std; int main() { string s; char szBuf[64]; while (1) { cout << "文字列を入力(zで終了): "; getline(cin, s, '\n'); if (s == "z") break; cout << "入力された文字列は: " << s << endl; } return 0; }入力された文字列を次々と表示します。止めたいときはzを入力します。
getline(入力ストリーム, string, 区切り文字);のようになります。最後の引数を省略すると'\n'となります。
次にswapメンバをみてみます。これはswap(a,b);とするとaとbのストリングを 入れ替えます。
// string04.cpp #include <iostream> #include <string> using namespace std; int show(string, string); int main() { string a("cat"), b("dog"); show(a, b); swap(a, b); show(a, b); return 0; } int show(string x, string y) { cout << "最初は" << x << endl; cout << "2番目は" << y << endl; return 0; }実行結果は左の図のようになります。catとdogが入れ替わっています。
実は、getlineもswapも関数テンプレートなのです。ちょっとごちゃごちゃしていて面倒です。ヘルプで確かめてみてください。関数テンプレートについては第35章を参照してみてください。
Update Jul/01/2002 By Y.Kumei