c ++删除序列之前的所有字符串,包括序列

时间:2014-08-14 02:00:36

标签: c++ string find

我一直在编写一个程序,通过网络从其他来源接收数据,我需要在发送数据进行处理之前对数据进行清理。以前,我一直在根据尺寸进行,如下所示:

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

但我需要删除的标题长度可变。所以在做了一些挖掘之后,我发现我可以通过查找我知道他们将要结束的字符序列来删除它们 - 在这种情况下\r\n\r\n - 然后删除所有内容,直到那时使用size_t如此:

size_t p = s2.find( "\r\n\r\n" );
s2.erase( 0, p );

但是仍然会在我的字符串的开头留下\r\n\r\n,这最多会在以后抛弃我的数据处理,最坏的情况下,可能会导致问题,因为我的程序中有一些部分对空白反应不好。

所以我的问题是:我是否有更好的方法可以删除并包含指定的字符序列?我可以p = p + 4;吗?是否可以使用size_t类型?

1 个答案:

答案 0 :(得分:5)

是的,你可以写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("\r\n\r\n");
s2.erase(0, p + 4);