さて、ストリングクラスに入力を行うのにcinを使っていると
まずいことも起こります。入力文字列にスペースが含まれると
そこが区切りと判断されてスペース以降が無視されてしまいます。
ストリングクラスには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