使用 stringstream::str() 更新后,C++ stringstream 无法正常工作
C++ stringstream not working correctly after updated with stringstream::str()
我知道 stringstream
可以用 stringstream::str()
更新,但如果我之后在 stringstream
中输入其他内容,它不会按预期工作。以下片段演示了该现象:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
stringstream ss; //ostringstream gives the same output
ss << "Original string ";
ss.str("Updated string ");
ss << "sth else";
cout << ss.str() << endl;
}
我希望得到输出
Updated string sth else
但它实际上输出
sth elsestring
似乎不是在当前字符串的末尾附加新输入的字符串(在我的例子中是 Updated string
),而是试图从头覆盖它。我的代码有什么问题?
您需要将 std::ios_base::app
添加到 openmode
。它确保 stringstream
对象在每次写入之前都查找到流的末尾。试试这个:
stringstream ss(std::ios_base::app|std::ios_base::in|std::ios_base::out);
我知道 stringstream
可以用 stringstream::str()
更新,但如果我之后在 stringstream
中输入其他内容,它不会按预期工作。以下片段演示了该现象:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
stringstream ss; //ostringstream gives the same output
ss << "Original string ";
ss.str("Updated string ");
ss << "sth else";
cout << ss.str() << endl;
}
我希望得到输出
Updated string sth else
但它实际上输出
sth elsestring
似乎不是在当前字符串的末尾附加新输入的字符串(在我的例子中是 Updated string
),而是试图从头覆盖它。我的代码有什么问题?
您需要将 std::ios_base::app
添加到 openmode
。它确保 stringstream
对象在每次写入之前都查找到流的末尾。试试这个:
stringstream ss(std::ios_base::app|std::ios_base::in|std::ios_base::out);