Вывести на экран все слова, состоящие только из латинских букв - 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
задается исходная строка и выполняются все функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д