Вывести на экран все слова, состоящие только из латинских букв - C (СИ)

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

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

З клавіатури вводиться текстовий рядок. Розробити програму, яка реалізує вказані дії. а) підраховує кількість чисел у тексті (не цифр, а саме чисел); б) виводить на екран всі слова, що складаються тільки з латинських літер; в) видаляє кожне друге слово. -------------------------------------------------------------------------------------------------------------------------------- С клавиатуры вводится строка . Разработать программу , которая реализует указанные действия . а ) подсчитывает количество цифр в тексте ( не цифры , а именно чисел) ; б) выводит на экран все слова , состоящие только из латинских букв ; в) удаляет каждое второе слово.

Решение задачи: «Вывести на экран все слова, состоящие только из латинских букв»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <locale.h>
  4. #define N 256
  5. int v_Slove(char *ps)
  6. {
  7.   char d[]=" .,;:!?\n\0";
  8.   char *pa=ps;
  9.   int i;
  10.   for(i=0;i<9;i++)
  11.   {
  12.     if(*pa==d[i])return 0;
  13.   }
  14.   return 1;
  15. }
  16. int kol_simv(char *ps)
  17. {
  18.    int c=0;
  19.   char *pps=ps;
  20.    while(v_Slove(pps))
  21.    {
  22.       c++;
  23.       pps++;
  24.    }
  25.    return c;
  26. }
  27. int chislo(char *ch)
  28. {
  29.   return (*ch>='0'&&*ch<='9');
  30. }
  31.  
  32. int nachalo_chisla(char * ch)
  33. {
  34.   return (chislo(ch)&&(!chislo(ch-1)));
  35. }
  36. int kol_chisel_v_texte(char *ps)
  37. {
  38.   int i,c;
  39.    for(i=0,c=0;ps[i]!='\0';i++)
  40.    {
  41.       if(nachalo_chisla(&ps[i]))
  42.       {
  43.          while(chislo(&ps[i++]));
  44.          c++;i--;
  45.       }
  46.    }
  47.   return c;
  48. }
  49. int latin_bukva(char *lat)
  50. {
  51.    return ((*lat>='\x61')&&(*lat<='\x7a'))||((*lat>='\x41')&&(*lat<='\x5a'));
  52. }
  53. int slovo_is_latin_bukv(char *ps)
  54. {
  55.    char*pps=ps;
  56.    int c=kol_simv(ps);
  57.    while(v_Slove(pps)&&latin_bukva(pps))
  58.    {
  59.       --c;
  60.       pps++;
  61.    }
  62.   return   (c==0)?1:0;
  63. }
  64. void vivod_slov_is_lat_bukv(char *a)
  65. {
  66.   int i;
  67.   char *n;
  68.   for(i=0;a[i]!='\0';i++)
  69.   {
  70.      if(v_Slove(&a[i])&&(i==0||!v_Slove(&a[i-1])))
  71.      {
  72.        if(slovo_is_latin_bukv(&a[i]))
  73.        {  
  74.          n=&a[i];
  75.           while(v_Slove(n))
  76.           {
  77.               printf("%c",*n);
  78.               n++; i++;
  79.           }
  80.           printf("\n");
  81.        }
  82.      }
  83.   }
  84. }
  85. char *udal_kazd_2_slovo(char *a)
  86. {
  87.   int c,i;
  88.   char *k;
  89.    for(i=0,c=1;a[i]!='\0';i++)
  90.    {
  91.       if(v_Slove(&a[i])&&(i==0||!v_Slove(&a[i-1])))
  92.       {
  93.          if(c%2==0)
  94.          {
  95.             k=&a[i]+kol_simv(&a[i]);
  96.             a[i]='\0';
  97.             strcat(&a[i],k);
  98.          }
  99.          c++;
  100.       }
  101.    }
  102.   return a;
  103. }
  104. int main(void)
  105. {
  106.    setlocale(LC_ALL,"RU");
  107.    char A[N]=" арвр swap, папа мыл no 345 2пол и 3три fgbvff. ";
  108.    printf("Исходная строка: %s\n",A);
  109.    printf("Количество чисел в тексте: %d\n",kol_chisel_v_texte(A));
  110.    vivod_slov_is_lat_bukv(A);
  111.    printf("Строка с удалённым каждым вторым словом: %s\n",udal_kazd_2_slovo(A));
  112.    return (0);
  113. }

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

  1. Переменная d объявлена как массив символов, который содержит символы, обозначающие окончания слов в русском языке.
  2. Функция v_Slove проверяет, является ли текущий символ окончанием слова.
  3. Функция kol_simv считает количество символов в слове, которые не являются окончаниями.
  4. Функция chislo проверяет, является ли символ числом.
  5. Функция nachalo_chisla проверяет, является ли текущий символ началом числа.
  6. Функция kol_chisel_v_texte считает количество чисел в тексте.
  7. Функция latin_bukva проверяет, является ли символ латинской буквой.
  8. Функция slovo_is_latin_bukv проверяет, является ли слово латинским.
  9. Функция vivod_slov_is_lat_bukv выводит на экран все слова, состоящие только из латинских букв.
  10. Функция udal_kazd_2_slovo удаляет каждое второе слово в строке.
  11. В функции main задается исходная строка и выполняются все функции.

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


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

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

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

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

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

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