#include <stdio.h>
#include <ctype.h>
#define TEXT_SIZE_MAX 4096
char text[TEXT_SIZE_MAX+1]; // символьный массив для загрузки текста
// объявление переменных - флаги и счетчики для всех видов слов
int letterWordCount = 0, letterWordOngoing = 0;
int digitWordCount = 0, digitWordOngoing = 0;
int symbolWordCount = 0, symbolWordOngoing = 0;
// функция завершения чтения слова и увеличение счетчика слова на единицу
void countLastWord(void)
{
if ( letterWordOngoing != 0 ) { letterWordOngoing = 0; letterWordCount++; }
else if ( digitWordOngoing != 0 ) { digitWordOngoing = 0; digitWordCount++; }
else if ( symbolWordOngoing != 0 ) { symbolWordOngoing = 0; symbolWordCount++; }
}
int main(void)
{
int i, n, c;
// загрузка текста в массив - цикл считывания одного символа текста
n = 0;
while( ( c = getchar() ) != EOF && c != 0 )
{
if ( n <= TEXT_SIZE_MAX - 1 )
text[ n++ ] = (char)c;
else
break;
}
text[ n ] = 0; // завершаем нулевым символом
// проход по символам текста загруженного в массив
for( i = 0; text[i] != 0; i++ )
{
// анализ символов: к какой группе они относятся и проверка состояний
if ( text[i] == '*'|| text[i] == '-'|| text[i] == '+' ) // проверка принадлежности к данному типу символов
{
if ( symbolWordOngoing == 0 )
{
countLastWord();
symbolWordOngoing = 1;
}
}
else if ( isdigit( text[i] ) ) // проверка пренадлежности к данному типу сиволов (цифра)
{
if ( digitWordOngoing == 0 )
{
countLastWord();
digitWordOngoing = 1;
}
}
else if ( islower( text[i] ) ) // проверка пренадлежности к данному типу сиволов (буква)
{
if ( letterWordOngoing == 0 )
{
countLastWord();
letterWordOngoing = 1;
}
}
else
{
printf("error: illegal character: %c / 0x%x\n", text[i], text[i]);
return 0;
}
}
countLastWord(); // финальное завершение текущего слова
// вывод количества посчитанных слов
printf("letterWordCount = %d\n", letterWordCount);
printf("digitWordCount = %d\n", digitWordCount );
printf("symbolWordCount = %d\n", symbolWordCount);
// вычисление конечного результата
if( letterWordCount > symbolWordCount ) { printf("в данном тексте больше групп букв, чем групп знаков\n"); }
else if ( letterWordCount == symbolWordCount ) { printf("в данном тексте одинаковое количество групп букв и групп знаков\n"); }
else { printf("в данном тексте групп букв меньше, чем групп знаков\n"); }
return 0;
}