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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define N 256
int v_Slove(char *ps)
{
  char d[]=" .,;:!?\n\0";
  char *pa=ps;
  int i;
  for(i=0;i<9;i++)
  {
    if(*pa==d[i])return 0;
  }
  return 1;
}
int kol_simv(char *ps)
{
   int c=0;
  char *pps=ps;
   while(v_Slove(pps))
   {
      c++;
      pps++;
   }
   return c;
}
int chislo(char *ch)
{
  return (*ch>='0'&&*ch<='9'); 
}
 
int nachalo_chisla(char * ch)
{
  return (chislo(ch)&&(!chislo(ch-1))); 
}
int kol_chisel_v_texte(char *ps)
{
  int i,c;
   for(i=0,c=0;ps[i]!='\0';i++)
   {
      if(nachalo_chisla(&ps[i]))
      {
         while(chislo(&ps[i++]));
         c++;i--;
      }
   }
  return c;
}
int latin_bukva(char *lat)
{
   return ((*lat>='\x61')&&(*lat<='\x7a'))||((*lat>='\x41')&&(*lat<='\x5a'));
}
int slovo_is_latin_bukv(char *ps)
{
   char*pps=ps;
   int c=kol_simv(ps);
   while(v_Slove(pps)&&latin_bukva(pps))
   {
      --c;
      pps++;
   }
  return   (c==0)?1:0;
}
void vivod_slov_is_lat_bukv(char *a)
{
  int i;
  char *n;
  for(i=0;a[i]!='\0';i++)
  {
     if(v_Slove(&a[i])&&(i==0||!v_Slove(&a[i-1])))
     { 
       if(slovo_is_latin_bukv(&a[i]))
       {  
         n=&a[i];
          while(v_Slove(n))
          {
              printf("%c",*n);
              n++; i++;
          }
          printf("\n");
       }
     }
  }
}
char *udal_kazd_2_slovo(char *a)
{
  int c,i;
  char *k;
   for(i=0,c=1;a[i]!='\0';i++)
   {
      if(v_Slove(&a[i])&&(i==0||!v_Slove(&a[i-1])))
      {
         if(c%2==0)
         {
            k=&a[i]+kol_simv(&a[i]);
            a[i]='\0';
            strcat(&a[i],k);
         }
         c++;
      }
   }
  return a;
}
int main(void)
{
   setlocale(LC_ALL,"RU");
   char A[N]=" арвр swap, папа мыл no 345 2пол и 3три fgbvff. ";
   printf("Исходная строка: %s\n",A);
   printf("Количество чисел в тексте: %d\n",kol_chisel_v_texte(A));
   vivod_slov_is_lat_bukv(A);
   printf("Строка с удалённым каждым вторым словом: %s\n",udal_kazd_2_slovo(A));
   return (0);
}

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

  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
Похожие ответы