Да, это возможно. Но для этого вам необходимо решить, каковы границы слов. Например, является ли «-» границей слова пробелом? Или вы бы считали это буквой?
Вы можете, например, отфильтровать не-слова, проверив, начинается ли найденная строка:
- как новое слово (т.е. находятся в начале строки, или предшествующий символ представляет собой нечто иное, чем буква), а
- заканчивается как слово (т.е. либо мы достигаем последнего символа строки, либо следующий символ не является последнее).
Это выглядит так:
while (( pos = userParagraph.find(searchWord, pos)) != std::string::npos) {
bool wstart = pos==0 || !isalpha(userParagraph[pos-1]);
bool wend = pos+searchWord.size()==userParagraph.size()
|| !isalpha(userParagraph[pos+searchWord.size()]);
if (wstart && wend)
++wordCount;
++pos;
}
Онлайн-демонстрация
Внимание: работает только с кодировкой одного символа. С UTF8 это не сработает для языков, в которых используются буквы, не входящие в алфавит ascii (например, подчеркнутые буквы, такие как é, ñ, ä, ..., будут ошибочно интерпретированы как допустимые разделители слов)