Вывести на экран все слова, состоящие только из латинских букв - 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);
- }
Объяснение кода листинга программы
- Переменная
d
объявлена как массив символов, который содержит символы, обозначающие окончания слов в русском языке. - Функция
v_Slove
проверяет, является ли текущий символ окончанием слова. - Функция
kol_simv
считает количество символов в слове, которые не являются окончаниями. - Функция
chislo
проверяет, является ли символ числом. - Функция
nachalo_chisla
проверяет, является ли текущий символ началом числа. - Функция
kol_chisel_v_texte
считает количество чисел в тексте. - Функция
latin_bukva
проверяет, является ли символ латинской буквой. - Функция
slovo_is_latin_bukv
проверяет, является ли слово латинским. - Функция
vivod_slov_is_lat_bukv
выводит на экран все слова, состоящие только из латинских букв. - Функция
udal_kazd_2_slovo
удаляет каждое второе слово в строке. - В функции
main
задается исходная строка и выполняются все функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д