我有一个字符串,其最后一部分(后缀)需要更改几次,并且需要生成新的字符串。我正在尝试使用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::writeostream::put -任何期望char*(不带大小号的附加参数)的东西很可能会对其进行特殊处理。

os.write("World\0", 6);

关于c++ - 为什么ostringstream去除NULL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6690089/

10-11 19:15