Подсчитать количество слов в тексте, которые заканчиваются на гласную букву - C (СИ)

Узнай цену своей работы

Формулировка задачи:

С клавиатуры вводится строка. Разработать программу, которая реализует указанные действия. а) подсчитывает количество слов в тексте, которые заканчиваются на гласную букву; б) выводит на экран все слова, длина которых меньше пяти символов; в) удаляет все слова, которые содержат хотя бы одну латинскую букву. Буду благодарен)
хоть один из пунктов)

Решение задачи: «Подсчитать количество слов в тексте, которые заканчиваются на гласную букву»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <locale.h>
  4. #define N 256
  5. //Функция v_Slove проверяет - настроен ли
  6. //указатель ps на слово или нет,
  7. //возвращая 1 в первом случае и 0 во втором
  8. //Короче говоря - "это слово или не слово?"
  9. int v_Slove(char *ps)
  10. {
  11.   char d[]=" .,;:!?\n\0";
  12.   char *pa=ps;
  13.   int i;
  14.   for(i=0;i<9;i++)
  15.   {
  16.     if(*pa==d[i])return 0;
  17.   }
  18.   return 1;
  19. }
  20. //Функция nach_slova проверяет
  21. // указатель на начале слова(возвращая 1)
  22. //или иначе возвращает 0
  23. int nach_slova(char *nach)
  24. {
  25.   char d[]=" .,;:!?";
  26.   int i;
  27.   if(v_Slove(nach))
  28.   for(i=0;i<7;i++)
  29.   {
  30.     if(*(nach-1)==d[i])return 1;
  31.   }
  32.  
  33.   return 0;
  34.  
  35. }
  36. //Функция  glasn проверяет гласная ли это буква(1) или нет(0)?
  37. int glasn(char *gl)
  38. {
  39.   int i;
  40.   char g[]="уеэоаыяиюУЕЭОАЫЯИЮ";
  41.   for(i=0;i<18;i++)
  42.   {
  43.      if(*gl==g[i])return 1;
  44.   }
  45.   return 0;
  46. }
  47. //Функция slovo_s_glasn проверяет - это  слово
  48. //с гласной буквой(1) или нет(0)?
  49. //Принимает указатель на начало слова
  50. int slovo_s_glasn(char *ps)
  51. {
  52.    char *pps=ps;
  53.    while(v_Slove(pps))pps++;
  54.    pps--;
  55.    return glasn(pps);
  56.    
  57. }
  58. //Функция kol_simv подсчитывает количество символов в слове.
  59. //Возвращает количество симв.
  60. //Принимает указатель на начало слова
  61. int kol_simv(char *ps)
  62. {
  63.    int c=0;
  64.    while(v_Slove(ps))
  65.    {
  66.       c++;
  67.       ps++;
  68.    }
  69.    return c;
  70. }
  71. //Функция latin проверяет - латинская ли это буква(1) или нет(0)?
  72. //Принимает указатель на букву
  73. int latin(char *lat)
  74. {
  75.    return ((*lat>='\x61')&&(*lat<='\x7a'))||((*lat>='\x41')&&(*lat<='\x5a'));
  76. }
  77. //Функция slovo_s_latin проверяет - это слово с латинской буквой(1) или нет(0)?
  78. //Принимает указатель на начало слова
  79. int slovo_s_latin(char *ps)
  80. {
  81.    char*pps=ps;
  82.    while(v_Slove(pps))
  83.    {
  84.       if(latin(pps))return 1;
  85.       pps++;
  86.    }
  87.    return 0;
  88. }
  89. //Функция kol_sl_s_gl подсчитывает количество слов с гласной буквой
  90. int kol_sl_s_gl(char *a)
  91. {
  92.   int kol_sl,i;
  93.    for(i=0,kol_sl=0;a[i]!='\0';i++)
  94.    {
  95.     if(nach_slova(&a[i]))
  96.     {
  97.          if(slovo_s_glasn(&a[i]))kol_sl++;
  98.     }
  99.    }
  100.    return kol_sl;
  101. }
  102. //Функция slova_men_5_simv выводит на экран все слова , которые меньше 5 символов
  103. void slova_men_5_simv(char *a)
  104. {
  105.   int kol_sl,i;
  106.   char *n;
  107.   for(i=0,kol_sl=0;a[i]!='\0';i++)
  108.   {
  109.      if(nach_slova(&a[i]))
  110.      {
  111.        if(kol_simv(&a[i])<5)
  112.        {  
  113.           n=&a[i];
  114.           while(v_Slove(n))
  115.           {
  116.               printf("%c",*n);
  117.               n++;
  118.           }
  119.           printf("\n");
  120.        }
  121.      }
  122.   }
  123. }
  124. //Функция udal_sl_s_lat удаляет все слова которые имеют хотя бы одну лат. букву
  125. char *udal_sl_s_lat(char *a)
  126. {
  127.   int i;
  128.   char *k;
  129.   for(i=0;a[i]!='\0';i++)
  130.   {
  131.       if(nach_slova(&a[i]))
  132.       {
  133.          if(slovo_s_latin(&a[i]))
  134.          {
  135.             k=&a[i]+kol_simv(&a[i]);
  136.             a[i]='\0';
  137.             strcat(&a[i],k);
  138.          }
  139.       }
  140.   }
  141.   return a;
  142. }
  143. int main(void)
  144. {
  145.    setlocale(LC_ALL,"RU");
  146.    char A[N]="Привед медвeд, фаsf aaas ggg медведы, пар запара par.";
  147.    printf("Исходная строка: %s\n",A);
  148.    printf("Количество слов с гласной в конце: %d\n",kol_sl_s_gl(A));
  149.    printf("Слова меньше 5 букв:\n");
  150.    slova_men_5_simv(A);
  151.    printf("Строка с удалёнными словами имевших хотя бы одну лат. букву: %s\n",udal_sl_s_lat(A));
  152.    return (0);
  153. }

Объяснение кода листинга программы

  1. Функция v_Slove() проверяет, является ли символ словом или нет.
  2. Функция nach_slova() проверяет, является ли указатель на начале слова.
  3. Функция glasn() проверяет, является ли буква гласной.
  4. Функция slovo_s_glasn() проверяет, является ли слово с гласной буквой в конце.
  5. Функция kol_simv() подсчитывает количество символов в слове.
  6. Функция latin() проверяет, является ли буква латинской.
  7. Функция slovo_s_latin() проверяет, является ли слово с латинской буквой в середине.
  8. Функция udal_sl_s_lat() удаляет слова, содержащие хотя бы одну латинскую букву.
  9. В функции main() задается исходная строка, выводится количество слов с гласной в конце, выводятся слова длиной меньше 5 символов, и выводится строка с удаленными словами, содержащими хотя бы одну латинскую букву.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.533 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы