我正在使用字符串流来执行家庭作业(将英语翻译为“ Piglatin”),并且注意到我认为与普通流不同的行为,我不理解。
以下语法是我教给常规流使用的“万无一失”的语法。但是,对于字符串流,有时会丢失最后一行:
stringstream ss(line);
string word;
ss >> word;
while(!ss.eof())
{
translateWord(word, translated);
cout << translated;
if(ss.peek() == ' ')
cout << ' ';
ss >> word;
}
line =但是水果像香蕉一样飞!预期的输出:utbay uitfray iesflay ikelay离开ananabay!实际输出:utbay uitfray iesflay ikelay离开
但是,使用以下版本(不是我所教的版本),最后的单词不会丢失:
getline(input, line);
stringstream ss(line);
string word;
while(!ss.eof())
{
ss >> word;
translateWord(word, translated);
output << translated;
if(ss.peek() == ' ')
output << ' ';
}
line =但是水果像香蕉一样飞!预期的输出:utbay uitfray iesflay ikelay离开ananabay!实际输出:utbay uitfray iesflay ikelay离开ananabay!
似乎与ss >> word的位置有关。
有人可以解释这种区别吗?以及为什么字符串流行为似乎与常规流不同。
感谢您,如果我错过任何明显的事情!
在您的第一个代码中,您在移动流之前输出了字符串,因此在最后一次迭代中,没有机会写入输出。您的第二个代码是正确的。