Найти подстроку в строке с итераторами

У меня есть подстрока, определенная двумя итераторами (start а также end). Мне нужно проверить, присутствует ли эта подстрока в другой строке.

Существует ли стандартный библиотечный алгоритм или строковый член, который я могу использовать или адаптировать для этого, не создавая совершенно новый строковый объект (std::string(start, end)) только для этого?

например

struct Substring
{
std::string::const_iterator start, end;
};

auto found = std::contains(whole.begin(), whole.end(), substring.start, substring.end); // ???

0

Решение

std::search

bool found =
std::search(hay.begin(), hay.end(), needle.begin(), needle.end()) != hay.end();
10

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

Вы можете использовать std::string::find метод:

auto found = (whole.find(&*substring.start, 0, substring.end - substring.start)
!= std::string::npos);

Преимущество над std::search в том, что std::find работает со строками и может быть реализован с помощью Бойера-Мура. К сожалению, это не то, как в gcc libstdc ++ это реализует.

0

По вопросам рекламы [email protected]