c++ - C++ 中从 StringStream 到 String 的额外字符
问题描述
我正在用 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 = "";
似乎没有任何效果,并且都产生相同的输出。
- 但是,当我
stringstream ss;
在 while 循环内部声明时,它运行良好。
如果有人能解释为什么将 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;
}
推荐阅读
- reactjs - 无法读取 null reactjs 的属性名称
- java - Android 位置管理器崩溃
- node.js - 快速更新某个html字段
- amazon-s3 - 在 S3 存储桶上附加文件
- c - C 数组 char* 在执行期间完全释放内存
- python - _tkinter.TclError: invalid command name ".36763856" 是什么意思?
- java - 如果用户使用 Google/Facebook 登录,我可以允许用户在注册时创建自定义用户名吗?
- xml - 任何字形图标都可以只是一条路径吗?
- javascript - 在单元测试中断言流类型错误
- php - 使用php将变量写入xml文件