删除string中sequence之前的所有内容,包括sequence

c++ Remove everything in string prior to sequence including sequence

本文关键字:sequence 包括 string 删除      更新时间:2023-10-16

我一直在编写一个程序,该程序通过网络接收来自其他来源的数据,我需要在将数据发送给处理之前对其进行消毒。在此之前,我一直是基于大小来做的,如下所示:

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);