第63章 stringクラスに代入


さて、ストリングクラスに入力を行うのに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章を参照してみてください。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jul/01/2002 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。