Определить, какие слова и в каком количестве можно создать из букв заданного текста - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста решить следующее задание. Даны некоторый текст и словарь с N слов. Определить, какие слова и в каком количестве можно создать с букв заданного текста. Возникают проблеми со словарем, не могу никак разобраться, как считать по слову чтобы знать длину каждого слова. Заранее огромное спасибо!)

Решение задачи: «Определить, какие слова и в каком количестве можно создать из букв заданного текста»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 10
//дан текст и словарь с N слов.Определить какие слова можно составить из букв текста
int main()
{
    char Text[] = "Full of vexation come I, with complaint"
             "Against my child, my daughter Hermia."
             "Stand forth, Demetrius. My noble lord,"
             "This man hath my consent to marry her."
             "Stand forth, Lysander. And, my gracious Duke,"
             "This man hath bewitch'd the bosom of my child.";
 
    char Dictionary[N][15] = {"revelling", "zero", "must", "june", "entreat", "modesty",
                             "refuse", "fruitless", "pilgrimage", "sovereignty"};
    char AlphaBeta[27] = "";
    int i = 0, j, n = 0, flag;
    while(1){//инициализируем первый элемент "азбуки"
        if(isalpha(Text[i])){
            Text[i] = tolower(Text[i]);
            AlphaBeta[0] = Text[i];
            break;
        }
    }
    while(Text[i]){
        if(j == 26)//если "азбука" заполнилась
            break;
        flag = 0;
        if(isalpha(Text[i])){//если символ является буквой
            Text[i] = tolower(Text[i]);//проверяем чтобы она была прописной
            for(j = 0; j <= n; ++j)
                if(Text[i] == AlphaBeta[j])
                    flag = 1;
            if(!flag){//и если ее еще нет в "азбуке"
                AlphaBeta[j] = Text[i];//то записываем
                ++n;
            }
        }
        ++i;
    }
    for(i = 0; i < N; ++i){//перебираем все слова из словаря
        for(j = 0; Dictionary[i][j]; ++j){//побуквенно
            n = 0;
            flag = 0;
            while(AlphaBeta[n]){
                if(Dictionary[i][j] == AlphaBeta[n])//на соответствие "азбуке"
                    flag = 1;
                ++n;
            }
            if(!flag)
                break;
        }
        if(j == strlen(Dictionary[i]))//если все буквы слова есть в "азбуке"
            puts(Dictionary[i]);//то печатаем это слово
    }
    return 0;
}

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

  1. Объявлены и инициализированы переменные:
    • Text[] - текст, состоящий из строк, содержащих фрагменты исходного текста;
    • Dictionary[N][15] - массив словаря, содержащий N слов, каждое из которых представлено в виде массива из 15 символов;
    • AlphaBeta[27] - массив азбуки, который будет заполняться символами;
    • i, j, n, flag - вспомогательные переменные для работы цикла.
  2. Заполняется азбука (массив AlphaBeta) символами из исходного текста. Если азбука заполнилась (достигнут 27 элементов), то процесс прекращается.
  3. Перебираются все слова из словаря (массив Dictionary).
  4. Для каждого слова из словаря проверяется, есть ли все его буквы в азбуке. Если есть, то это слово выводится на экран.

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


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

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

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