gpt4 book ai didi

c++ - 当 stream.peek()= ='\n' 时,stream >> z1 有什么用

转载 作者:行者123 更新时间:2023-11-28 04:21:52 24 4
gpt4 key购买 nike

istream& operator>>(istream& stream, list<monom>& pol)
{
char z1,z2;
monom m;
stream >> noskipws;
while(stream >> m.a >> z1 >> z2 >> m.i) {
if (z1!=’x’ || z2!=’^’) {
stream.setstate(ios::failbit);
break;
}
pol.push_back(m);
// This is where I do not understand why stream >> z1
if (stream.peek()==’\n’) {
stream >> z1;
break;
}
}
pol.sort();
pol.remove(null);
return stream;
}

我有一个 monom 类,想为包含 monom 的列表重载 >> 运算符。看着代码我明白了一切,直到这一点

if (stream.peek()==’\n’) {
stream >> z1;
break;
}

我明白 stream.peek() 查看下一个空间,如果它是空的 (==\n) 那为什么要 stream >> z1,这让我很困惑。

最佳答案

代码运行循环读取 monom格式为 <m.a value>x^<m.i value> 的项目直到它到达一个换行符。它假定值或项之间没有空格,包括换行符。

循环使用peek()检查每个是否成功读取monom项目是否以换行符结尾。如果存在换行符,则从流中提取换行符(因此它不会保留在流中以供稍后读取查看)并且循环结束。否则,循环继续读取下一个 monom项目。

noskipws的使用是这样operator>>不会将换行符视为可以跳过的空格。

关于c++ - 当 stream.peek()= ='\n' 时,stream >> z1 有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283220/

24 4 0