Матч 332, Статистика текста (TextStatistics)

Дивизион 2, Уровень 1

 

В заданном тексте найти среднюю длину слова. Слова состоят из прописных и заглавных букв латинского алфавита. Слова могут разделяться цифрами, пробелами и символами пунктуации. Средняя длина слова равна суммарной длине слов в тексте, разделенной на количество слов.

 

Класс: TextStatistics

Метод: double averageLength(string text)

Ограничения: text содержит от 1 до 50 символов, словом является последовательность из рядом стоящих букв ‘a’-‘z’, ‘A’-‘Z’.

 

Вход. Строка символов text.

 

Выход. Средняя длина слова в тексте.

 

Пример входа

text

“This is div2 easy problem.”

“Hello, world!”

“”

 

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

4.0

5.0

0.0

 

 

РЕШЕНИЕ

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

 

Читаем текст и подсчитываем общее количество букв латинского алфавита и слов в нем. Буква является началом слова, если предыдущий символ не является буквой. Затем общее число букв делим на количество слов. Отдельно обрабатываем первый символ входного текста.

 

ПРОГРАММА

 

#include <cstdio>

#include <cctype>

#include <string>

using namespace std;

 

class TextStatistics

{

public:

  double averageLength(string text)

  {

    int i, len, words;

    len = words = 0;

    if (isalpha(text[0])) len++, words++;

    for(i = 1; i < text.size(); i++)

    {

      if (isalpha(text[i])) len++;

      if (isalpha(text[i]) && (!isalpha(text[i-1]))) words++;

    }

    if (!words) return 0.0;

    return 1.0 * len / words;

  }

};