Дано предложение, где есть знаки препинания. Нужно подсчитать количество слов, совпадающих с данным

Каким образом это сделать это задание, как его реализовать?

#include<iostream>
#include<string.h>
#include<string>
using namespace std;

int main() {

    setlocale(LC_ALL, "rus");
    cout << "Введите предложение: ";  string stroka;  getline(cin, stroka);  //вводим строку 
    cout << endl << endl;  
    cout << "Введите слово: ";  string slovo;  cin >> slovo;  //вводим слово
    cout << endl << endl;

//понятия не имею, что дальше писать 

    return 0;
}

Ответы (2 шт):

Автор решения: Harry

Ну, можно сделать так -

int howMuch(const string& in, const string& what)
{
    int count = 0;
    for(size_t pos = 0; (pos = in.find(what,pos)) != in.npos; pos++)
    {
        if (pos > 0 && isalpha(in[pos-1])) continue;
        if (isalpha(in[pos + what.size()])) continue;
        count++;
    }
    return count;
}

Просто ищем вхождение как подстроки, и проверяем, что до и после букв нет.

Для русских букв надо использовать isalpha с локалью. Или написать свое...

→ Ссылка
Автор решения: Павел Ериков

Ну или так:

int i = 0;
int size = stroka.size();
int count = 0;
bool isEqual = true;
while (i < size) {
    //Доходим до начала слова
    while (i < size && !isLetter(stroka[i])) ++i;
    int j = 0;
    isEqual = true;
    //Сверяем слова
    for(; j < slovo.size(); ++j)
        if (stroka[j + i] != slovo[j]) {
            isEqual = false;
            break;
        }
    i += j;
    if (isEqual)
        ++count;
    //Если слова не совпадают, то пропускаем его
    else 
        while (i < size && isLetter(stroka[i])) ++i;
}

Функция isLetter:

bool isLetter(char s) {
return (s >= 'A' && s <= 'Z') ||
    (s >= 'a' && s <= 'z');
}

Это если не использовать функции по типу find и т.д. Но если вы используете string, то конечно лучше не своё писать.

→ Ссылка