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

标签 c++ string find

我一直在编写一个程序,通过网络从其他来源接收数据,我需要在发送数据进行处理之前对数据进行清理。之前我都是按size做的,如下:

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 类型甚至可能吗?

最佳答案

是的,您可以编写 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);

关于c++在序列之前删除字符串中的所有内容,包括序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25298915/

相关文章:

C++ 在 unordered_map 中添加新对象的最佳方法

c++ - 我可以安全地混合使用 -std=c++11 和 -std=c++14 编译的库吗?

c++ - 无法将图像保存为白色背景 OpenCV 的 JPG

c++ - 在应用程序中嵌入 SSL key

regex - 如何使用正则表达式拆分字符串

c++ - 以科学计数法将double转换为字符串比c++中的sprintf更快

find - 更改 {} 的参数 find exec

c++ - SCons StaticLibrary header 更改后未重建

python - 是否有Python3内置用于格式化表示多项式首项系数的字符串?

bash - "dir/*: No such file or directory"与 find -exec ... "{}/*"