我一直在尝试使用C ++字符串流类做一些相对简单的字符串操作,但我有使用get()方法的一个问题。出于某种原因,每当我由字符提取输出字符它附加最后字母的第二个副本。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
   stringstream ss("hello");
   char c;

   while(!ss.eof()) {
      ss.get(c);
      cout << "char: " << c << endl;
   }
   return 0;
}

从程序的输出是:

char: h
char: e
char: l
char: l
char: o
char: o

任何帮助,您可以给我在这,将不胜感激。

有帮助吗?

解决方案

在流ss.eof()的端还不知道该流的末尾将很快达到,但一个字符的以下提取失败。由于提取失败,因为流结束为止,c没有改变。你的程序无法识别ss.get(c)失败,并打印c的旧值再次。

以检查一种更好的方式,如果有仍然是可以从流中读取的会是这样一个循环的字符:

while (ss.get(c)) {
   cout << "char: " << c << endl;
}

其他提示

其循环的顺序的,因为。您的读取\ 0和EOF。

重新排列这样的代码

int main() {
   stringstream ss("hello");
   char c;

   ss.get(c);
   while(!ss.eof()) {
      cout << "char: " << c << endl;
      ss.get(c);
   }
   return 0;
}

如果你试图读取经过所述文件的末尾的EOF标志时,才设置。下面的代码由获取之后检测EOF(),而不是之前它解决了这个问题:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
   stringstream ss("hello");
   char c;

   while(1) {
      ss.get(c);
      if(ss.eof())
          break;

      cout << "char: " << c << endl;
   }
   return 0;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top