1

文字列クラスの>>演算子のオーバーロードに問題があります。これが私のクラスです:

class str
{
    char s[250];
    public:
    friend istream& operator >> (istream& is, str& a);
    friend ostream& operator << (ostream& os, str& a);
    friend str operator + (str a, str b);
    str * operator = (str a);
    friend int operator == (str a, str b);
    friend int operator != (str a, str b);
    friend int operator > (str a, str b);
    friend int operator < (str a, str b);
    friend int operator >= (str a, str b);
    friend int operator <= (str a, str b);
};

そしてここにオーバーロードされた演算子があります:

istream& operator >> (istream& in, str& a)
{
    in>>a.s;
    return in;
}

問題は、文字列を最初のスペース(文から1単語のみ)までしか読み取らないことです。

私はそれを解決しました。dreamincodeで答えを見つけました:D

4

3 に答える 3

3

の動作operator>>は、最初の空白文字まで読み取ることです。関数を次のように変更します。

istream& operator >> (istream& in, str& a)
{
    in.getline( a.s, sizeof(a.s) );
    return in;
}
于 2012-10-03T18:13:59.943 に答える
1

このように機能します。おそらく、std :: getline(std :: istream&、std :: string&、char)のstd :: getline(std :: istream&、std :: string&)を使用することをお勧めします。

編集istream:他の人、 'sgetlineも正しいことを示唆しています。

于 2012-10-03T18:08:43.390 に答える
1

istreamクラスのオーバーロードされた演算子>>()は、空白スペース(タブ、改行、スペース文字)が見つかるまで入力を受け取ります。getlineメソッドを使用する必要があります。

...
istream& operator >> (istream& in, str& a)
{
    in.getline(a.s, 250);
    return in;
}
...
于 2012-10-03T18:13:30.407 に答える