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