Я добавлю для полноты, есть другой подход, который возможен с std::search
, работает как std::string::find
, разница в том, что вы работаете с итераторами, что-то вроде:
std::string::iterator it(str.begin()), end(str.end());
std::string::iterator s_it(search_str.begin()), s_end(search_str.end());
it = std::search(it, end, s_it, s_end);
while(it != end)
{
// do something with this position..
// a tiny optimisation could be to buffer the result of the std::distance - heyho..
it = std::search(std::advance(it, std::distance(s_it, s_end)), end, s_it, s_end);
}
Я считаю, что иногда превосходит std::string::find
, особенно если вы представляете свою строку как vector<char>
.