我遇到重载>>的问题字符串类的运算符; 这是我的班级:
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
答案 0 :(得分:3)
operator>>
的行为是读取直到第一个空格字符。将您的功能更改为以下内容:
istream& operator >> (istream& in, str& a)
{
in.getline( a.s, sizeof(a.s) );
return in;
}
答案 1 :(得分:1)
这就是它的工作原理,您可能想要使用std::getline(std::istream&,std::string&) of std::getline(std::istream&,std::string&,char)。
编辑:其他人,建议istream
的{{1}}也是对的。
答案 2 :(得分:1)
istream类的重载运算符&gt;&gt;()只接受输入,直到找到任何空格(制表符,换行符,空格字符)。您需要使用getline方法。
...
istream& operator >> (istream& in, str& a)
{
in.getline(a.s, 250);
return in;
}
...