Есть ли функция, реализующая обратную память в C или C ++?

Я хочу найти «\ r \ n \ r \ n» в заголовке HTTP.
Я знаю, что это в конце пакета, поэтому, если я переверну поиск «\ r \ n \ r \ n», я получу хорошую производительность.

Есть ли функция, реализующая обратный поиск в C или C ++?
Если да, то какой?
Благодарю.

0

Решение

Обратный поиск «\ r \ n \ r \ n» может дать неверный результат. Это неверная логика, потому что тело HTTP может содержать «\ r \ n \ r \ n».

10

Другие решения

В C ++ многие из контейнеров предлагают rbegin() а также rend(), которые реализуют итерацию в обратном порядке. Затем вы можете передать их любому из стандартных алгоритмов.

Например, std::string::rbegin() а также std::string::rend().

1

Попытка сделать это, чтобы решить вашу проблему, неверна; если вы уже знаете длину заголовка, то поиск для \r\n\r\n; он расположен на n-4 положение где n это длина. Если вы не знаете длину, то вычисление длины с начала занимает столько же времени, сколько и поиск \r\n\r\n,

С учетом сказанного, вопрос, как сделать «обратный» strstr или же memmem является действительным. За strstrОптимальный метод — просто многократно вызывать форварда strstrиспользуя предыдущее совпадение плюс один символ в начальной точке и сохраняя последнее найденное вхождение. За memmemВы могли бы достичь гораздо большей производительности, адаптировав оптимальный алгоритм пересылки для запуска в обратном направлении (в основном просто сводя на нет все индексы).

0

Да, есть — std::find_end, Используется так:

string  str = "abcabc";
string  substr = "abc";

string::iterator ret =
std::find_end(str.begin(), str.end(), substr.begin(), substr.end());

if (ret == str.end())  cout << "not found\n";
else                   cout << "at: " << result - str.begin() << "\n";

Также, если вы ищете в std::string есть std::string::rfind() метод. std::find_end() хорош для любого контейнера, в том числе char[]

0

Да, есть.

Если предположить, header это std::string:

header.rfind( "\r\n\r\n" );
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector