Массив: В массиве строк найти все слова, содержащие заданное количество гласных букв - C (СИ)
Формулировка задачи:
Здравствуйте. Подскажите,пожалуйста, как доделать код. Мне нужно в массиве строк найти все слова, содержащие заданное количество гласных букв, у меня получилось только посчитать количество гласных в строках. Подскажите, как строку разделить на слова и произвести в них поиск гласных без использования указателей, пожалуйста?
#include<stdio.h>
#include<conio.h>
int main()
{
int i,j,y,c=0;
char str[4][30];
const char glas[]="AEIOUYaeiouy";
clrscr();
printf("\nZapolnite stroki:\n");
for(i=0; i<4; i++)
fgets(str[i],30,stdin);
printf("\n vi vveli\n");
for(i=0; i<4; i++)
printf("\nstroka %d\n %s",i+1,str[i]);
for(y=0;y<=4;y++)
{
for(i=0;str[y][i]!='\0';i++)
{
for(j=0;glas[j]!='\0';j++)
{
if(str[y][i]==glas[j])
c++;
}
}
}
printf("%d",c);
getch();
return 0;
}Решение задачи: «Массив: В массиве строк найти все слова, содержащие заданное количество гласных букв»
textual
Листинг программы
#include <stdio.h>
#define N 4
#define M 30
int main()
{
int i, j, y, count = 0, k, flag, l, n, q, flag_vowels = 0;
char str[N][M], buff[M];
const char glas[]="AEIOUYaeiouy";
char div[] = " ,.;:!?\n\t";
for(i = 0, j = 0; i < N; i++){
printf("Enter line %d:\n", i + 1);
fgets(str[i], M, stdin);
while(str[i][j] != '\n' && str[i][j] != '\0')
j++;
if(str[i][j] == '\n')
str[i][j] = '\0';
}
puts("Enter the number of vowels:");
while(1 != scanf("%d", &n) || n < 0){
fprintf(stderr, "Error!Try again.");
getchar();
}
for(i = 0; i < N; i++){
for(j = k = l = flag = 0; str[i][j]; j++){
for(y = 0; div[y]; y++){
if(str[i][j] == div[y]){
if(!flag){
while(k < j){
buff[l++] = str[i][k++];
}
buff[l] = '\0';
if(buff[0]){
for(count = q = 0; buff[q]; q++)
for(int i = 0; glas[i ]; i++)
if(buff[q] == glas[i]){
count++;
break;
}
if(count == n){
printf("Word %s has %d vowels\n", buff, count);
flag_vowels = 1;
}
}
l = 0;
k++;
flag = 1;
break;
}
else
k++;
}
}
if(!div[y])
flag = 0;
}
}
if(!flag_vowels)
printf("No words containing %d vowels\n", n);
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Подключается заголовочный файл stdio.h, который содержит функции для ввода и вывода данных.
- Определяются две константы: N (количество строк в массиве) и M (максимальная длина строки).
- В функции main() инициализируются переменные i, j, y, count, k, flag, l, n, q и flag_vowels.
- Создается массив строк str и буфер buff.
- Вводится строка, которую необходимо проанализировать.
- Происходит поиск слов, содержащих заданное количество гласных букв.
- Если найденное слово соответствует условию, то выводится сообщение о количестве гласных букв в этом слове.
- Если в массиве нет слов, содержащих заданное количество гласных букв, то выводится соответствующее сообщение.
- Функция main() возвращает 0, что означает успешное завершение работы программы.