memmem () STL путь? - PullRequest
       15

memmem () STL путь?

3 голосов
/ 19 июля 2010

Существует ли алгоритм STL, который можно использовать для поиска последовательности байтов внутри буфера, как это делает memmem ()?

Ответы [ 4 ]

6 голосов
/ 19 июля 2010

Я не знаю, хороший ли это код, но работает следующее: std::search:

#include <cstdio>
#include <string.h>
#include <algorithm>

int main(int argc, char **argv)
{
    char *a = argv[0];
    char *a_end = a + strlen(a);
    char *match = "out";
    char *match_end = match+strlen(match); // If match contained nulls, you would have to know its length.

    char *res = std::search(a, a_end, match, match_end);

    printf("%p %p %p\n", a, a_end, res);

    return 0;
}
2 голосов
/ 19 июля 2010

std::search найдет первое вхождение одной последовательности внутри другой последовательности.

0 голосов
/ 19 июля 2010

А как насчет find и substr?

#include <string>
using std::string;
...
size_t found;

found = s.find("ab",4);
if (found != string::npos)
  finalString = s.substr(found); // get from "ab" to the end
0 голосов
/ 19 июля 2010

Почему бы не использовать strstr?

Алгоритм не реализован.Вы можете реализовать свой собственный предикат, который будет использоваться в сочетании с std :: find_if, но это слишком сложный метод, IMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...