さて、ストリングクラスに入力を行うのに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