Нахождение анаграмм в словаре - C (СИ)

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

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

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
 
#define PATH "C:\\1.txt"
#define STRLEN 36

void anogramm()
{
    const int len = STRLEN;
    char word[len], line[len];
 
    memset(&line,NULL,sizeof(line));
    memset(&word,NULL,sizeof(word));
 
    ifstream file(PATH);
    if(file==NULL)
    {
        perror("Error opening file");
                getch();
        exit(1);
    }
 
    cout << "Input word: ";
    cin >> word;
    while(!file.eof())
    {
        file.getline(line,len);
        if(strncmp(line,word,3) == 0)
        {
            cout << "found " << line;
        }
        }
 
}
void main()
{
    clrscr();
    int menu, flag=1;
    cout << "Start game: 1";
    cout << "\nLook for word: 2";
    cout << "\nAdd word: 3";
 
    do
    {
 
        cout << "\nYour choice: ";
        cin >> menu;
        switch(menu)
        {
            case 1: clrscr(); flag = 1; anogramm();  break;
            case 2: clrscr(); flag = 1; cout << "Look for word"; break;
            case 3: clrscr(); flag = 1; cout << "Add word"; break;
 
            default: clrscr(); flag = 0; cout << "Wrong number";
        }
    }
    while(flag==0);
    getch();
}
сделал но только немного не правильно strncmp сравнивает немного не так как надо... допустим в словаре слово бром и когда я ввожу бор, он выводит все как и должен, НО если я ввожу бромид, он всеравно выводит слово бром, хотя не должен(

Решение задачи: «Нахождение анаграмм в словаре»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
 
#define PATH "C:\\kurs\\1.txt"
#define STRLEN 36
 
void sort(char word[],int size)
{
    char temp;
 
    for(int i=0;i<size;i++)
    {
        for(int j=0;j<size;j++)
        {
            if(word[i]<word[j])
            {
                temp=word[i];
                word[i]=word[j];
                word[j]=temp;
            }
        }
    }
}
void anogramm()
{
    const int len = STRLEN;
    char word[len], line[len],temp[len];
 
    memset(&line,NULL,sizeof(line));
    memset(&word,NULL,sizeof(word));
    memset(&temp,NULL,sizeof(temp));
 
    ifstream file(PATH);
    if(file==NULL)
    {
        perror("Error opening file");
        getch();
        exit(1);
    }
 
    cout << "Input word: ";
    cin >> word;
 
    while(!file.eof())
    {
        file.getline(line,len);
        strcpy(temp,line);
        sort(word,len);
        sort(line,len);
        if(strcmp (word,line) == 0)
        {
            cout << "found " << temp;
        }
    }
 
}
void main()
{
    clrscr();
    int menu, flag=1;
    cout << "Start game: 1";
    cout << "\nLook for word: 2";
    cout << "\nAdd word: 3";
 
    do
    {
 
        cout << "\nYour choice: ";
        cin >> menu;
        switch(menu)
        {
            case 1: clrscr(); flag = 1; anogramm();  break;
            case 2: clrscr(); flag = 1; cout << "Look for word"; break;
            case 3: clrscr(); flag = 1; cout << "Add word"; break;
 
            default: clrscr(); flag = 0; cout << "Wrong number";
        }
    }
    while(flag==0);
    getch();
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем пути к файлу и длину строки
  3. Создаем функцию сортировки для дальнейшего использования в функции anagramm
  4. Создаем функцию anagramm, которая будет искать анаграммы в файде
  5. Инициализируем переменные, используемые в функции anagramm
  6. Открываем файл для чтения с помощью ifstream
  7. Запрашиваем у пользователя ввод слова для поиска анаграмм
  8. Входим в цикл while, который будет читать строки из файла до тех пор, пока не достигнем конца файла
  9. Внутри цикла считываем текущую строку в массив line
  10. Копируем эту строку в массив temp
  11. Сортируем слово и строку, считанную из файла с помощью функции sort
  12. Сравниваем отсортированные строки. Если они совпадают, выводим на экран соответствующую анаграмму
  13. Завершаем работу функции anagramm
  14. Входим в цикл do-while, который будет продолжать работу до тех пор, пока пользователь не выберет пункт меню, не соответствующий ни одному из предложенных вариантов
  15. Внутри цикла запрашиваем у пользователя ввод выбранного пункта меню
  16. В зависимости от выбранного пункта меню вызываем соответствующую функцию
  17. Завершаем работу программы

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


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

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

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