删除string中sequence之前的所有内容,包括sequence
c++ Remove everything in string prior to sequence including sequence
我一直在编写一个程序,该程序通过网络接收来自其他来源的数据,我需要在将数据发送给处理之前对其进行消毒。在此之前,我一直是基于大小来做的,如下所示:
char data[max_length];
boost::system::error_code error;
size_t length = sock->read_some( boost::asio::buffer( data ), error );
std::stringstream ss;
for( int i = 0; i < max_length; i++ ) {
ss << data[i];
}
std::vector<int> idata;
std::string s2 = ss.str();
s2.erase( 0, 255 );
但是我需要删除的头是可变长度的。因此,在做了一些挖掘之后,我发现我可以通过找到我知道它们将结束的字符序列来删除它们-在本例中为rnrn
-并使用size_t删除之前的所有内容,如下所示:
size_t p = s2.find( "rnrn" );
s2.erase( 0, p );
但是,这仍然在字符串的开头留下rnrn
,这在最好的情况下会导致我稍后的数据处理,在最坏的情况下,可能会导致问题,因为我的程序中有一些段对空白的响应不太好。
所以我的问题是:有没有更好的方法可以做到这一点,将删除并包括指定的字符序列?我可以只做p = p + 4;
吗?对于size_t类型,这可能吗?
是的,你可以写p + 4
,因为size_t
是一个(无符号)整数类型。
顺便说一下,您可能还希望将data
直接传递给std::string
构造函数,而不是使用std::stringstream ss
。
编辑:为了更详细地解释,它看起来像这样:
char data[max_length];
// Read data and ensure that it is null-terminated ...
std::string s2(data); // Call the std::string constructor that inputs a null-terminated C string.
size_t p = s2.find("rnrn");
s2.erase(0, p + 4);
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- 计算平均值,不包括上次得分
- 从多个源构造一个对象,包括一个对象向量
- 在编译中包括 Botan 2
- 将值从另一个数组写入数组,不包括不需要的值 C++
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 包括C++头文件
- CPP 包括 Azure DevOps 中的目录设置
- 包括STL,而不会乱扔全球范围
- 如何反转我的输入,包括否定
- 包括没有完整路径的我的库
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- C++包括类名间距和类实例化
- 链接错误,包括我创建的相同头文件 - C++
- 标头,包括在 Swift 项目中使用C++文件时的错误
- 如果语句不包括文本行?
- 如何将字符串与结构(也包括字符串)进行比较?
- 删除string中sequence之前的所有内容,包括sequence