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