А812б

Задача: Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков «+», «-«, «*». Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.

Выяснить, верно ли, что в данном тексте больше групп букв, чем групп знаков.

Задача решена в двух вариантах — с использованием класса string и и с использованием массива символов, завершающихся нулём ( char[], null terminated string ).

Тесты ( для двух вариантов ):

тестовые данные количество посчитанных слов результат по условию задачи
1.  afsf1213**++  letterWordCount = 1
digitWordCount  = 1
symbolWordCount = 1
 в данном тексте одинаковое количество групп букв и групп знаков
2.  afsf1213**++asfs2434gfh21+++—dhf**++vg  letterWordCount = 5
digitWordCount  = 3
symbolWordCount = 3
 в данном тексте больше групп букв, чем групп знаков
3.  abcd+++—123efgh**++—123367++**-sdf—+754*+-bmwazs++834hello++—****  letterWordCount = 5
digitWordCount  = 4
symbolWordCount = 7
 в данном тексте групп букв меньше, чем групп знаков

Вариант 1: решение с использованием класса string

Код программы :

Код программы на Java:

Ссылка на ideone.com: http://ideone.com/MS3BKc

План программы:

  1. Объявление переменных — флаги и счетчики для всех видов слов
  2. Функция завершения чтения слова и увеличение счетчика слова на единицу
  3. Стандартный строковый объект класса string
  4. Ввод текст из стандартного потока ввода
  5. Проход по символам текста
  6. Анализ символов: к какой группе они относятся и проверка состояний
  7. Проверка принадлежности к данному типу символов ( +, — , * / цифра / буква )
  8. Финальное завершение текущего слова
  9. Вывод количества посчитанных слов
  10. Вычисление конечного результата

В программе используется переменная text типа string, которая позволяет хранить текст переменной длины. Переменная text заполняется символами из стандартного потока ввода. Подразумевается, что символ с значением «ноль» введён быть не может, по этому нулевой символ в конце текста является завершающим.

Цикл выполняется по всем символам string, вплоть до нулевого символа и анализирует принадлежность каждого символа к группе символов. Согласно условию задачи это — мал. буквы, цифры и символы + , — , * . В программе использованы 3 переменных-флага, описывающих текущие состояние чтение одного слова данной группы. Также есть переменные-счётчики для каждой группы слов. Каждый счётчик наращивается при сбрасывании флага, то есть, по завершении чтения группы.

Для проверки типа символа используются стандартные макросы isdigit и islower из библиотеки ctype .

Ссылка на ideone.com: http://ideone.com/fork/RiwQTO

Вариант 2: решене с использованием строки символов с завершающим нулём char[]

Код программы :

Код программы на Java:

Ссылка на ideone.com: http://ideone.com/uaQucV

План программы:

  1. Объявление символьного массива для загрузки текста
  2. Объявление переменных — флаги и счетчики для всех видов слов
  3. Функция завершения чтения слова и увеличение счетчика слова на единицу
  4. Загрузка текста в массив — цикл считывания одного символа текста
  5. Завершение нулевым символом
  6. Проход по символам текста загруженного в массив
  7. Анализ символов: к какой группе они относятся и проверка состояний
  8. Проверка принадлежности к данному типу символов ( +, — , * / цифра / буква )
  9. Финальное завершение текущего слова
  10. Вывод количества посчитанных слов
  11. Вычисление конечного результата

Программа читает непрерывный поток текстовых символов и загружает их в символьный массив text . По окончанию ввода добавляется нулевой символ, чтобы символьный массив выглядел, как строка, завершающаяся нулём (null terminated string). При вводе учитывается возможность появления мулевого символа, что также прекращает ввод.

Цикл выполняется по символьному массиву, вплоть до нулевого символа и анализирует принадлежность каждого символа к группе символов. Согласно условию задачи это — мал. буквы, цифры и символы + , — , * . В программе использованы 3 переменных-флага, описывающих текущие состояние чтение одного слова данной группы. Также есть переменные- счётчики для каждой группы слов. Каждый счётчик наращивается при сбрасывании флага, то есть, по завершении чтения группы.

Для проверки типа символа используются стандартные макросы isdigit и islower из библиотеки ctype .

Ссылка на ideone.com: http://ideone.com/LXiyTn

Related Images: