Определить, какие слова и в каком количестве можно создать из букв заданного текста - 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;
- }
Объяснение кода листинга программы
- Объявлены и инициализированы переменные:
- Text[] - текст, состоящий из строк, содержащих фрагменты исходного текста;
- Dictionary[N][15] - массив словаря, содержащий N слов, каждое из которых представлено в виде массива из 15 символов;
- AlphaBeta[27] - массив
азбуки
, который будет заполняться символами; - i, j, n, flag - вспомогательные переменные для работы цикла.
- Заполняется
азбука
(массив AlphaBeta) символами из исходного текста. Еслиазбука
заполнилась (достигнут 27 элементов), то процесс прекращается. - Перебираются все слова из словаря (массив Dictionary).
- Для каждого слова из словаря проверяется, есть ли все его буквы в
азбуке
. Если есть, то это слово выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д