Подсчитать количество слов в тексте, которые заканчиваются на гласную букву - C (СИ)
Формулировка задачи:
С клавиатуры вводится строка. Разработать программу, которая реализует указанные действия.
а) подсчитывает количество слов в тексте, которые заканчиваются на гласную букву;
б) выводит на экран все слова, длина которых меньше пяти символов;
в) удаляет все слова, которые содержат хотя бы одну латинскую букву.
Буду благодарен)
хоть один из пунктов)
Решение задачи: «Подсчитать количество слов в тексте, которые заканчиваются на гласную букву»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define N 256
//Функция v_Slove проверяет - настроен ли
//указатель ps на слово или нет,
//возвращая 1 в первом случае и 0 во втором
//Короче говоря - "это слово или не слово?"
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;
}
//Функция nach_slova проверяет
// указатель на начале слова(возвращая 1)
//или иначе возвращает 0
int nach_slova(char *nach)
{
char d[]=" .,;:!?";
int i;
if(v_Slove(nach))
for(i=0;i<7;i++)
{
if(*(nach-1)==d[i])return 1;
}
return 0;
}
//Функция glasn проверяет гласная ли это буква(1) или нет(0)?
int glasn(char *gl)
{
int i;
char g[]="уеэоаыяиюУЕЭОАЫЯИЮ";
for(i=0;i<18;i++)
{
if(*gl==g[i])return 1;
}
return 0;
}
//Функция slovo_s_glasn проверяет - это слово
//с гласной буквой(1) или нет(0)?
//Принимает указатель на начало слова
int slovo_s_glasn(char *ps)
{
char *pps=ps;
while(v_Slove(pps))pps++;
pps--;
return glasn(pps);
}
//Функция kol_simv подсчитывает количество символов в слове.
//Возвращает количество симв.
//Принимает указатель на начало слова
int kol_simv(char *ps)
{
int c=0;
while(v_Slove(ps))
{
c++;
ps++;
}
return c;
}
//Функция latin проверяет - латинская ли это буква(1) или нет(0)?
//Принимает указатель на букву
int latin(char *lat)
{
return ((*lat>='\x61')&&(*lat<='\x7a'))||((*lat>='\x41')&&(*lat<='\x5a'));
}
//Функция slovo_s_latin проверяет - это слово с латинской буквой(1) или нет(0)?
//Принимает указатель на начало слова
int slovo_s_latin(char *ps)
{
char*pps=ps;
while(v_Slove(pps))
{
if(latin(pps))return 1;
pps++;
}
return 0;
}
//Функция kol_sl_s_gl подсчитывает количество слов с гласной буквой
int kol_sl_s_gl(char *a)
{
int kol_sl,i;
for(i=0,kol_sl=0;a[i]!='\0';i++)
{
if(nach_slova(&a[i]))
{
if(slovo_s_glasn(&a[i]))kol_sl++;
}
}
return kol_sl;
}
//Функция slova_men_5_simv выводит на экран все слова , которые меньше 5 символов
void slova_men_5_simv(char *a)
{
int kol_sl,i;
char *n;
for(i=0,kol_sl=0;a[i]!='\0';i++)
{
if(nach_slova(&a[i]))
{
if(kol_simv(&a[i])<5)
{
n=&a[i];
while(v_Slove(n))
{
printf("%c",*n);
n++;
}
printf("\n");
}
}
}
}
//Функция udal_sl_s_lat удаляет все слова которые имеют хотя бы одну лат. букву
char *udal_sl_s_lat(char *a)
{
int i;
char *k;
for(i=0;a[i]!='\0';i++)
{
if(nach_slova(&a[i]))
{
if(slovo_s_latin(&a[i]))
{
k=&a[i]+kol_simv(&a[i]);
a[i]='\0';
strcat(&a[i],k);
}
}
}
return a;
}
int main(void)
{
setlocale(LC_ALL,"RU");
char A[N]="Привед медвeд, фаsf aaas ggg медведы, пар запара par.";
printf("Исходная строка: %s\n",A);
printf("Количество слов с гласной в конце: %d\n",kol_sl_s_gl(A));
printf("Слова меньше 5 букв:\n");
slova_men_5_simv(A);
printf("Строка с удалёнными словами имевших хотя бы одну лат. букву: %s\n",udal_sl_s_lat(A));
return (0);
}
Объяснение кода листинга программы
- Функция v_Slove() проверяет, является ли символ словом или нет.
- Функция nach_slova() проверяет, является ли указатель на начале слова.
- Функция glasn() проверяет, является ли буква гласной.
- Функция slovo_s_glasn() проверяет, является ли слово с гласной буквой в конце.
- Функция kol_simv() подсчитывает количество символов в слове.
- Функция latin() проверяет, является ли буква латинской.
- Функция slovo_s_latin() проверяет, является ли слово с латинской буквой в середине.
- Функция udal_sl_s_lat() удаляет слова, содержащие хотя бы одну латинскую букву.
- В функции main() задается исходная строка, выводится количество слов с гласной в конце, выводятся слова длиной меньше 5 символов, и выводится строка с удаленными словами, содержащими хотя бы одну латинскую букву.