Есть ли такая функция, как find_last_of в std, но не в строке? - PullRequest
0 голосов
/ 31 октября 2018

Я знаю, что есть функция

string::find_last_of

Но я хочу обработать большой кусок данных char *. Я не хочу присваивать символ * строке.

Я знаю, что есть стандартная функция

std::find

Но он может найти только символ * в положительной последовательности. Есть ли такой способ найти в обратном порядке? Если нет в std, есть ли способ в boost?

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

В имеется функция * boost , которая может решить эту проблему.

boost::algorithm::find_last

пример:

char* s = "abcdabc";
cout << boost::algorithm::find_last(s, "b").begin() - s;
0 голосов
/ 31 октября 2018

Если вы хотите найти один символ, как std::find(), вы можете использовать ... std::find(). Взгляните на std::reverse_iterator:

auto foo(char* str, std::size_t size, char to_find)
{
    auto rev_it = std::find(std::make_reverse_iterator(str + size),
                            std::make_reverse_iterator(str),
                            to_find);
    auto it = std::make_reverse_iterator(rev_it);

}
0 голосов
/ 31 октября 2018

std::find_end()

Поиск последней подпоследовательности элементов [s_first, s_last) в диапазоне [first, last).

Например

#include <algorithm>

char *data = ...;
char *data_end = data + size;
char toFind = ...;
char *pfind = &toFind;

char *found = std::find_end(data, data_end, pfind, pfind + 1);
if (found != data_end)
    ...
...