Поиск подстроки множественных вхождений в строке [C ++] - PullRequest
3 голосов
/ 03 декабря 2009

существует ли какой-либо алгоритм STL или стандартный способ определения количества вхождений конкретной подстроки в строку? Например, в строке:

'How do you do at ou'

строка "ou" появляется дважды. Я пробовал некоторые алгоритмы STL с предикатами и без них, но я обнаружил, что эти алгоритмы из STL хотят сравнивать компоненты строки, которая в моем случае является char, но не может? сравнить подстроки. Я придумываю что-то вроде этого:

str - строка

obj - подстрока, которую мы ищем

std::string::size_type count_subs(const std::string& str, const std::string& obj)
{
std::string::const_iterator beg = str.begin();
std::string::const_iterator end = str.end();
std::string::size_type count = 0;
while ((beg + (obj.size() - 1)) != end)
{
    std::string tmp(beg, beg + obj.size());
    if (tmp == obj)
    {
        ++count;
    }
    ++beg;
}
return count;
}

спасибо.

1 Ответ

5 голосов
/ 03 декабря 2009
#include <string>
#include <iostream>

int Count( const std::string & str, 
           const std::string & obj ) {
    int n = 0;
    std::string ::size_type pos = 0;
    while( (pos = obj.find( str, pos )) 
                 != std::string::npos ) {
        n++;
        pos += str.size();
    }
    return n;
}

int main() {
    std::string s = "How do you do at ou";
    int n = Count( "ou", s );
    std::cout << n << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...