C++ 中从 StringStream 到 String 的额外字符
Extra character from StringStream to String in C++
我正在用 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
有人可以解释为什么会这样吗?
我尝试过的事情:
ss.clear();
while 循环内
正在 while 循环内将字符串初始化为空:word = "";
似乎没有任何效果,并且都产生相同的输出。
- 然而,当我在 while 循环中声明
stringstream ss;
时,它运行良好。
如果有人能解释为什么将 stringstream 声明放在 while 循环之外可能会导致出现额外字符,我将非常高兴。
我还使用 g++
编译器和 --std=c++11
。
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;
}
我正在用 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
有人可以解释为什么会这样吗?
我尝试过的事情:
ss.clear();
while 循环内正在 while 循环内将字符串初始化为空:
word = "";
似乎没有任何效果,并且都产生相同的输出。
- 然而,当我在 while 循环中声明
stringstream ss;
时,它运行良好。
如果有人能解释为什么将 stringstream 声明放在 while 循环之外可能会导致出现额外字符,我将非常高兴。
我还使用 g++
编译器和 --std=c++11
。
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;
}