我有一个字符串,其最后一部分(后缀)需要更改几次,并且需要生成新的字符串。我正在尝试使用ostringstream来执行此操作,因为我认为,使用流将比字符串连接快。但是,当前一个后缀大于后一个后缀时,它就会变得困惑。流也剥离了空字符。
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
ostringstream os;
streampos pos;
os << "Hello ";
pos = os.tellp();
os << "Universe";
os.seekp(pos);
cout<< os.str() << endl;
os << "World\0";
cout<< os.str().c_str() << endl;
return 0;
}
输出
Hello Universe
Hello Worldrse
但我想要
Hello World
。我该怎么做呢?还有其他方法可以更快地执行此操作吗?编辑:
附加
std::ends
可以正常工作。但是想知道它在内部如何工作。还想知道是否有更快的方法可以做到这一点。 最佳答案
它不会剥离任何东西。 C++中的所有字符串文字都由NUL终止,因此,只要涉及到任何处理它的人,只要手动插入一个字符串就可以完成该字符串。如果需要,请使用ostream::write
或ostream::put
-任何期望char*
(不带大小号的附加参数)的东西很可能会对其进行特殊处理。
os.write("World\0", 6);
关于c++ - 为什么ostringstream去除NULL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6690089/