【问题标题】:Extra character from StringStream to String in C++ [duplicate]C++中从StringStream到String的额外字符[重复]
【发布时间】:2019-09-19 23:28:53
【问题描述】:

我正在用 C++ 11 编写一个代码,它会读取一些行并打印每行的第一个单词。我决定使用 getline 和 stringstream。

string line, word;

stringstream ss;

while(somecondition){
    getline(cin, line);
    ss << line;
    ss >> word;

    cout << word << endl;
}

我尝试使用以下输入测试这段代码:

a x
b y
c z

预期的输出是:

a
b
c

但实际输出是:

a
xb
yc

有人能解释一下为什么会这样吗?

我尝试过的事情:

  1. ss.clear(); 在 while 循环中

  2. 在while循环中初始化字符串为空:word = "";

似乎没有任何效果,并且都产生相同的输出。

  1. 但是,当我在 while 循环中声明 stringstream ss; 时,它运行良好。

如果有人能解释为什么将 stringstream 声明放在 while 循环之外可能会导致出现额外字符,我将非常高兴。

我还使用了g++ 编译器和--std=c++11

【问题讨论】:

  • this answer 有什么帮助吗?
  • ss &lt;&lt; line; 添加到字符串流。
  • clear 函数并没有像你想象的那样做。

标签: c++ stringstream


【解决方案1】:

ss.clear() 不会像您期望的那样清除流的现有内容。它会重置流的错误状态。需要使用str()方法替换已有内容:

while (getline(cin, line)) {
    ss.str(line);
    ss.clear();
    ss >> word;
    cout << word << endl;
}

否则,只需在每次迭代时创建一个新流:

while (getline(cin, line)) {
    istringstream iss(line);
    iss >> word;
    cout << word << endl;
}

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多