Предположим, что я получил stringbuf с некоторым содержимым, включающим определенные последовательности символов, которые должны быть удалены:
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();
К сожалению, я ошибся в своем первоначальном подходе
Как я упоминал ранее, настоящая проблема связана с boost::asio::streambuf
, и моя ошибка заключалась в попытке имитировать это с std::istream
в отдельном консольном приложении для целей тестирования.
Конечно, с asio :: streambuf вы не можете сделать что-то вроде
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 или любую другую последовательность символов из ввода?