C++ 超载>&燃气轮机;字符串类c+的运算符+;

C++ 超载>&燃气轮机;字符串类c+的运算符+;,c++,string,class,overloading,operator-keyword,C++,String,Class,Overloading,Operator Keyword,我对字符串类重载>>运算符有问题; 这是我的班级: 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

我对字符串类重载>>运算符有问题; 这是我的班级:

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);
};
问题是它只读取字符串到第一个空格(句子中只有一个单词)


我解决了。在dreamincode上找到答案:D

这就是它的工作原理,您可能想要使用它


编辑:其他人建议
istream
getline
也是正确的。

这就是它的工作原理,您可能想要使用它

编辑:其他建议
istream
getline
也正确。

istream类的重载运算符>>()只接受输入,直到找到任何空格(制表符、换行符、空格字符)。您需要使用getline方法

...
istream& operator >> (istream& in, str& a)
{
    in.getline(a.s, 250);
    return in;
}
...
istream类的重载运算符>>()只接受输入,直到找到任何空格(制表符、换行符、空格字符)。您需要使用getline方法

...
istream& operator >> (istream& in, str& a)
{
    in.getline(a.s, 250);
    return in;
}
...
的行为是一直读取到第一个空白字符。将您的功能更改为以下内容:

istream& operator >> (istream& in, str& a)
{
    in.getline( a.s, sizeof(a.s) );
    return in;
}
的行为是一直读取到第一个空白字符。将您的功能更改为以下内容:

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

Re:“问题是它只读取第一个空格的字符串”:而您希望它一直读取到。什么?(换句话说:不清楚你想做什么,所以我们无法真正帮助你。)例如:我想读“这是斯巴达”,它只读“这”@MihaiSvet,ruakh问题是关于你如何期望它知道这是足够的。看看这个链接,
istream>
不就是这样工作的吗“问题是它只读取字符串到第一个空格”:而您希望它一直读取到…什么?(换句话说:不清楚您要做什么,所以我们无法真正帮助您完成)。例如:我想读“这是斯巴达”,它只读“这是斯巴达”“@MihaiSvet,ruakh的问题是关于你希望它如何知道这已经足够了。看看这个链接,
istream>
不就是这样工作的吗?”?