假设我得到一个字符串缓冲区,其中包含一些必须删除的字符序列:
std::stringbuf string_buff;
std::iostream io_stream (&string_buff);
io_stream << "part-one\r\npart-two\r\npart-three\r\nEND";
在那里,必须删除 CRLF 对,所以我测试了一些:
int pos = 0;
while (true) {
pos = string_buff.str().rfind("\r\n");
if (pos == string_buff.str().npos) {
break;
} else {
std::string preamble = string_buff.str().substr(0, pos);
std::string postamble = string_buff.str().substr(pos +2);
io_stream.seekp(0);
io_stream << preamble << postamble;
}
}
但序列保持相同的长度。所以,我得到以下结果:
part-onepart-twopart-threeENDNDNDND
我想有一些方法可以做到这一点——而且更优雅——但我找不到方法。
顺便一提。似乎对内部字符串的直接操作不起作用。我说一些类似的东西:
string_buff.str().clear();
两者都不
io_stream.clear();
或者
io_stream.flush();
不幸的是,我在最初的方法中弄错了
正如我之前提到的,真正的问题与 a 有关,boost::asio::streambuf
而我的错误是试图模仿它,将 astd::istream
在单独的控制台应用程序中用于测试目的。
当然,使用 asio::streambuf y 不能做一些 as
strembuf.str("");
所以真实的情况是这样的:
boost::asio::streambuf stream_buff;
std::iostream response_stream(&stream_buff);
response_stream << "part-one\r\npart-two\r\npart-three\r\nEND";
我为混乱道歉。
问题保持不变:如何从输入中删除 CRLF -或任何其他字符序列?