字符串流的行为不同于常规流c ++

问题描述 投票:0回答:1

我正在使用字符串流来执行家庭作业(将英语翻译为“ 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的位置有关。

有人可以解释这种区别吗?以及为什么字符串流行为似乎与常规流不同。

感谢您,如果我错过任何明显的事情!

c++ string stream getline stringstream
1个回答
0
投票

在您的第一个代码中,您在移动流之前输出了字符串,因此在最后一次迭代中,没有机会写入输出。您的第二个代码是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.