fork download
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. #define TEXT_SIZE_MAX 4096
  5.  
  6. char text[TEXT_SIZE_MAX+1]; // символьный массив для загрузки текста
  7.  
  8. // объявление переменных - флаги и счетчики для всех видов слов
  9. int letterWordCount = 0, letterWordOngoing = 0;
  10. int digitWordCount = 0, digitWordOngoing = 0;
  11. int symbolWordCount = 0, symbolWordOngoing = 0;
  12.  
  13. // функция завершения чтения слова и увеличение счетчика слова на единицу
  14. void countLastWord(void)
  15. {
  16. if ( letterWordOngoing != 0 ) { letterWordOngoing = 0; letterWordCount++; }
  17. else if ( digitWordOngoing != 0 ) { digitWordOngoing = 0; digitWordCount++; }
  18. else if ( symbolWordOngoing != 0 ) { symbolWordOngoing = 0; symbolWordCount++; }
  19. }
  20.  
  21. int main(void)
  22. {
  23. int i, n, c;
  24.  
  25. // загрузка текста в массив - цикл считывания одного символа текста
  26. n = 0;
  27. while( ( c = getchar() ) != EOF && c != 0 )
  28. {
  29. if ( n <= TEXT_SIZE_MAX - 1 )
  30. text[ n++ ] = (char)c;
  31. else
  32. break;
  33. }
  34. text[ n ] = 0; // завершаем нулевым символом
  35.  
  36. // проход по символам текста загруженного в массив
  37. for( i = 0; text[i] != 0; i++ )
  38. {
  39. // анализ символов: к какой группе они относятся и проверка состояний
  40. if ( text[i] == '*'|| text[i] == '-'|| text[i] == '+' ) // проверка принадлежности к данному типу символов
  41. {
  42. if ( symbolWordOngoing == 0 )
  43. {
  44. countLastWord();
  45. symbolWordOngoing = 1;
  46. }
  47. }
  48. else if ( isdigit( text[i] ) ) // проверка пренадлежности к данному типу сиволов (цифра)
  49. {
  50. if ( digitWordOngoing == 0 )
  51. {
  52. countLastWord();
  53. digitWordOngoing = 1;
  54. }
  55. }
  56. else if ( islower( text[i] ) ) // проверка пренадлежности к данному типу сиволов (буква)
  57. {
  58. if ( letterWordOngoing == 0 )
  59. {
  60. countLastWord();
  61. letterWordOngoing = 1;
  62. }
  63. }
  64. else
  65. {
  66. printf("error: illegal character: %c / 0x%x\n", text[i], text[i]);
  67. return 0;
  68. }
  69. }
  70.  
  71. countLastWord(); // финальное завершение текущего слова
  72.  
  73. // вывод количества посчитанных слов
  74. printf("letterWordCount = %d\n", letterWordCount);
  75. printf("digitWordCount = %d\n", digitWordCount );
  76. printf("symbolWordCount = %d\n", symbolWordCount);
  77.  
  78. // вычисление конечного результата
  79. if( letterWordCount > symbolWordCount ) { printf("в данном тексте больше групп букв, чем групп знаков\n"); }
  80. else if ( letterWordCount == symbolWordCount ) { printf("в данном тексте одинаковое количество групп букв и групп знаков\n"); }
  81. else { printf("в данном тексте групп букв меньше, чем групп знаков\n"); }
  82.  
  83. return 0;
  84. }
Success #stdin #stdout 0s 3304KB
stdin
afsf1213**++asfs24340gfh21+++-dhf**++vg
stdout
letterWordCount = 5
digitWordCount  = 3
symbolWordCount = 3
в данном тексте больше групп букв, чем групп знаков