Массив: В массиве строк найти все слова, содержащие заданное количество гласных букв - 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;
}

Объяснение кода листинга программы

В этом коде выполняется следующая последовательность действий:

  1. Подключается заголовочный файл stdio.h, который содержит функции для ввода и вывода данных.
  2. Определяются две константы: N (количество строк в массиве) и M (максимальная длина строки).
  3. В функции main() инициализируются переменные i, j, y, count, k, flag, l, n, q и flag_vowels.
  4. Создается массив строк str и буфер buff.
  5. Вводится строка, которую необходимо проанализировать.
  6. Происходит поиск слов, содержащих заданное количество гласных букв.
  7. Если найденное слово соответствует условию, то выводится сообщение о количестве гласных букв в этом слове.
  8. Если в массиве нет слов, содержащих заданное количество гласных букв, то выводится соответствующее сообщение.
  9. Функция main() возвращает 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы