Нахождение анаграмм в словаре - 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, который будет продолжать работу до тех пор, пока пользователь не выберет пункт меню, не соответствующий ни одному из предложенных вариантов
- Внутри цикла запрашиваем у пользователя ввод выбранного пункта меню
- В зависимости от выбранного пункта меню вызываем соответствующую функцию
- Завершаем работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д