C++:为什么重新输入字符串流不起作用?内容保持不变
C++: Why re-input stringstream doesn't work? the content remains the same
我想了解 C++ 中 stringstream 的细节。但是当我尝试重新输入(“<<”)stringstream 对象时,我发现了一个问题。 (即 obj 的内容仍然保持不变。)我的代码如下。输出显示在评论中。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
stringstream sso;
cout <<"orginal: " << sso.str() <<endl; //orginal:"empty"
sso << "A" << " " << "B" << " " << "C";
cout <<"flowin:" << sso.str() <<endl; //flowin:A B C
string r1, r2, r3;
sso >> r1 >> r2 >> r3;
cout << "flowout:" << r1 << r2 << r3 << endl;//flowout:ABC
cout << "base: " << sso.str() << endl; //base: A B C
cout << "----problem here-----" << endl;
sso << "D" << " " << "E" << " " << "F";
cout <<"flowin:" << sso.str() <<endl; //flowin:A B C
cout << "----this works-----" << endl;
sso.clear(); //clear flag
sso.str(""); //clear content
sso << "D" << " " << "E" << " " << "F";
cout <<"flowin:" << sso.str() <<endl; //flowin:D E F
return 0;
}
为什么?我不明白“---这里有问题---”的结果。为什么 sso 不接受新输入?
赞赏,
最后一次读取 sso >> r1 >> r2 >> r3;
使流进入失败状态,因为在它仍在尝试为 r3
读取更多字符时没有更多可用字符。
在失败状态下,无法写入或读取流。要解决您的问题,请将 sso.clear();
移动到 sso << "D"
.
之前
如果在 C
之后输出额外的 space,您会看到不同的行为,因为这样流就不会进入失败状态(它成功读取 r3
,同时仍然有 space 在流中)。
我想了解 C++ 中 stringstream 的细节。但是当我尝试重新输入(“<<”)stringstream 对象时,我发现了一个问题。 (即 obj 的内容仍然保持不变。)我的代码如下。输出显示在评论中。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
stringstream sso;
cout <<"orginal: " << sso.str() <<endl; //orginal:"empty"
sso << "A" << " " << "B" << " " << "C";
cout <<"flowin:" << sso.str() <<endl; //flowin:A B C
string r1, r2, r3;
sso >> r1 >> r2 >> r3;
cout << "flowout:" << r1 << r2 << r3 << endl;//flowout:ABC
cout << "base: " << sso.str() << endl; //base: A B C
cout << "----problem here-----" << endl;
sso << "D" << " " << "E" << " " << "F";
cout <<"flowin:" << sso.str() <<endl; //flowin:A B C
cout << "----this works-----" << endl;
sso.clear(); //clear flag
sso.str(""); //clear content
sso << "D" << " " << "E" << " " << "F";
cout <<"flowin:" << sso.str() <<endl; //flowin:D E F
return 0;
}
为什么?我不明白“---这里有问题---”的结果。为什么 sso 不接受新输入?
赞赏,
最后一次读取 sso >> r1 >> r2 >> r3;
使流进入失败状态,因为在它仍在尝试为 r3
读取更多字符时没有更多可用字符。
在失败状态下,无法写入或读取流。要解决您的问题,请将 sso.clear();
移动到 sso << "D"
.
如果在 C
之后输出额外的 space,您会看到不同的行为,因为这样流就不会进入失败状态(它成功读取 r3
,同时仍然有 space 在流中)。