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;
}

问题是它只将字符串读取到第一个空格(句子中只有一个单词)。

我解决了。在 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&) 的 std::getline(std::istream&,std::string&,char)

编辑:其他人,建议istreamgetline也是正确的。

于 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 回答