bal*_*lki 5 c++ string-concatenation ostringstream
我有一个字符串,其最后一部分(后缀)需要多次更改,我需要生成新的字符串.我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)
产量
Hello Universe
Hello Worldrse
Run Code Online (Sandbox Code Playgroud)
但我想要Hello World.我该怎么做呢?有没有其他方法可以更快的方式做到这一点?
编辑:
附加std::ends作品.但想知道它是如何在内部工作的.还想知道是否有更快的方法来做同样的事情.
字符串"World"已经以空值终止.这就是C字符串的工作方式."World\0"有两个\0字符.因此,operator<<(ostream&, const char*)将它们视为相同,并将所有字符复制到\0.如果你试试,你可以更清楚地看到这一点os << "World\0!".该!不会都被复制,因为operator<<在第一次停\0.
所以,事实并非如此ostringstream.这就是C字符串的const char*工作方式.
它不会剥离任何东西。C++ 中的所有字符串文字均以 NUL 终止,因此对于处理该字符串的任何人而言,通过手动插入一个字符串,您只需完成该字符串即可。使用ostream::write或ostream::put,如果您需要这样做 \xe2\x80\x94 任何期望的东西char*(没有额外的大小参数)很可能会特殊对待它。
os.write("World\\0", 6);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |