Нахождение анаграмм в словаре - 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();
}Решение задачи: «Нахождение анаграмм в словаре»
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();
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем пути к файлу и длину строки
- Создаем функцию сортировки для дальнейшего использования в функции anagramm
- Создаем функцию anagramm, которая будет искать анаграммы в файде
- Инициализируем переменные, используемые в функции anagramm
- Открываем файл для чтения с помощью ifstream
- Запрашиваем у пользователя ввод слова для поиска анаграмм
- Входим в цикл while, который будет читать строки из файла до тех пор, пока не достигнем конца файла
- Внутри цикла считываем текущую строку в массив line
- Копируем эту строку в массив temp
- Сортируем слово и строку, считанную из файла с помощью функции sort
- Сравниваем отсортированные строки. Если они совпадают, выводим на экран соответствующую анаграмму
- Завершаем работу функции anagramm
- Входим в цикл do-while, который будет продолжать работу до тех пор, пока пользователь не выберет пункт меню, не соответствующий ни одному из предложенных вариантов
- Внутри цикла запрашиваем у пользователя ввод выбранного пункта меню
- В зависимости от выбранного пункта меню вызываем соответствующую функцию
- Завершаем работу программы