如何在"std :: vector <char>"容器中查找单个单词

4 c++ search stl vector find

我有一个混合二进制(即图像)和一些存储在" std::vector<char>"容器中的人类可读数据(即HTTP标头).(数据以"CRLFCRLF(\ r \n\r \n)"指示符分隔)

任何人都可以建议如何在" "容器中找到" \ r \n\r \n " 的起始位置?std::vector<char>

是否可以使用STL库执行" std::size_t pos = data.find("\r\n\r\n");(数据为" std::vector<char>")"的操作?

谢谢.

Mar*_*low 7

您不需要将要查找的模式放入容器中.AC串就足够了.

std::vector<char> v = ....;
const char *crlf2 = "\r\n\r\n";
auto it = std::search(v.begin(), v.end(), crlf2, crlf2 + strlen(crlf2));
Run Code Online (Sandbox Code Playgroud)

无论如何,在此之后,it将包含一个迭代器到该v模式开始的向量中(或者v.end()如果找不到模式).

您可以使用std::distance(v.begin(), it)或仅将其转换为索引it - v.begin()


jua*_*nza 5

您可以使用std::search搜索感兴趣的字符序列的第一个匹配项.您必须将该序列放在数组或容器中.

std::vector<char> v = ....;
std::vector<char> start{'\r', '\n', '\r', '\n'};
auto it = std::search(v.begin(), v.end(), start.begin(), start.end());
Run Code Online (Sandbox Code Playgroud)