StringStream中的额外字符到C ++中的String [重复]

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

这个问题在这里已有答案:

我在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;时,它工作得很好。

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

我也使用g++编译器与--std=c++11

c++ stringstream
1个回答
2
投票

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.