494. Детская считалочка

 

Для каждой входной строки подсчитать количество слов в ней. Словом называется последовательность подряд идущих букв латинского алфавита (больших и маленьких).

 

Вход. Состоит из набора строк, каждая из которых содержит несколько слов (как минимум одно).

 

Выход. Для каждой входной строки вывести количество слов в ней.

 

Пример входа

Meep Meep!
I tot I taw a putty tat.
I did! I did! I did taw a putty tat.
Shsssssssssh ... I am hunting wabbits. Heh Heh Heh Heh ...
 

Пример выхода

2
7
10
9
 

 

РЕШЕНИЕ

обработка текста

 

Анализ алгоритма

Читаем последовательно буквы текста. Пусть c – текущий прочитанный символ, а ch – предыдущий символ. С символа c начинается новое слово, если c – буква латинского алфавита, а ch – нет. Для каждой строки достаточно подсчитать число таких букв, с которых начинается новое слово.

 

Пример

Первая строка содержит два слова: Meep, Meep. Четвертая строка содержит 9 слов: Shsssssssssh, I, am, hunting, wabbits, Heh, Heh, Heh, Heh.

 

Реализация алгоритма

В переменной res будем подсчитывать число слов в текущей строке. Изначально установим значение предыдущего символа ch равным 0. Читаем символы из входного потока, пока не достигнем конца файла.

 

res = ch = 0;

while(scanf("%c",&c) == 1)

{

 

Если встретился символ перехода на новую строку, то выводим количество слов res в обработанной строке и обнуляем его.

 

  if (c == '\n')

  {

    printf("%d\n",res);

    res = 0;

  }

 

Проверяем, начинается ли с символа c новое слово. Функция isalpha(c) возвращает истину, если c – буква латинского алфавита (большая или маленькая), определена в <ctype.h>.

 

  if (isalpha(c) && !isalpha(ch)) res++;

 

После обработки текущий символ становится предыдущим.

 

  ch = c;

}