Найти кол-во слов. С++
Код проходит 16 из 22 тестов, никак не могу понять где ошибка. Помогите пожалуйста)
Дана строка, возможно, содержащая пробелы. Определите количество слов в этой строке. Слово - это несколько (возможно, одна) подряд идущих букв латинского алфавита (как заглавных, так и строчных).
ВХОДНЫЕ ДАННЫЕ Программа получает на вход строку, содержащую произвольные ASCII-символы.
ВЫХОДНЫЕ ДАННЫЕ Программа должна вывести одно число - количество слов.
ПРИМЕР
ввод
Yesterday, all my troubles seemed so far away
вывод
8
#include <iostream>
#include <string>
using namespace std;
int main() {
int res = 0;
string c;
getline(cin, c);
for (int i = 1; i < c.size() - 1; i++)
{
(c[i] == 32 && ((c[i + 1] > 64 && c[i + 1] < 91) || (c[i + 1] > 96 && c[i + 1] < 123))) {
res += 1;
}
}
cout << res + 1;
}
Ответы (2 шт):
Для подобных задач стоит использовать регулярки - это прям то, для чего они были созданы:
#include <iostream>
#include <iterator>
#include <regex>
#include <string>
#include <cstdlib>
int main() {
std::string str;
std::copy(std::istreambuf_iterator<char>{std::cin},
std::istreambuf_iterator<char>{}, std::back_inserter(str));
std::regex regex{"[a-zA-Z]+"};
std::sregex_token_iterator{str.begin(), str.end(), regex};
size_t count =
std::distance(std::sregex_token_iterator{str.begin(), str.end(), regex},
std::sregex_token_iterator{});
std::cout << count << std::endl;
return EXIT_SUCCESS;
}
Вот вся ваша программа:
int CountWords(const char * s)
{
int count = 0;
for(const char * c = s; *c; ++c)
if (isalpha(*c) && !isalpha(*(c+1))) ++count;
return count;
}
int main()
{
string s;
getline(cin,s);
cout << CountWords(s.c_str()) << endl;
}
Все тесты пройдены...
Кстати, вас там в задачке просят сделать отдельную функцию :) Не думаю, что проблема в этом, но если есть условие - его следует выполнять :)