Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <locale>
- #include <string>
- using namespace std;
- ifstream f("input.txt", ios::in);
- int n; // Кол-во записей в списке
- //Входные данные
- // 1 строка - кол-во записей
- // <слово> <кол-во строк описания>
- // каждая строка описания в отдельной строке
- struct Data{
- string Slovo; //Слово для определения
- int count; // Кол-во строк поясняющего текста
- string* txt = new string[5]; //Массив строк поясняющего текста
- };
- struct point{
- Data date; //Информационное поле узла в виде структуры
- point* next; //Указатель на следующий узел списка
- };
- void print_point(point* beg){ //Вывод информации по одному элементу
- cout << beg->date.Slovo << endl;
- for (int i = 0; i < beg->date.count + 1; i++){
- cout << beg->date.txt[i] << endl;
- }
- cout << endl;
- }
- void print_list(point* beg) //Вывод всех слов в списке
- //печать списка
- {
- int num = 0;
- point* p = beg;//начало списка
- while (p != 0)
- {
- num++;
- cout << p->date.Slovo << " - " << num << endl;
- p = p->next;//переход к следующему элементу
- }
- cout << endl;
- cout << endl;
- }
- point* make_list(int n)
- {
- point*beg;//указатель на первый элемент
- point*p, *r;//вспомогательные указатели
- string str;
- string slovo;
- int ntxt;
- string s, s2;
- int a;
- beg = new(point);//выделяем память под первый элемент
- f >> slovo;
- f >> s; //Считываем кол-во поясняющих строк + проверка на ошибку при вводе
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- ntxt = a;
- }
- else{
- cout << "Ошибка ввода кол-ва строк в первом элементе " << endl;
- exit(0);
- }
- beg->date.Slovo = slovo;
- beg->date.count = ntxt;
- for (int i = 0; i < beg->date.count+1; i++){
- getline(f, str);
- beg->date.txt[i] = str;
- }
- beg->next = 0;//обнуляем адресное поле
- //ставим на этот элемент указатель p (последний элемент)
- p = beg;
- for (int i = 0; i < n - 1; i++)
- {
- r = new(point);//создаем новый элемент
- f >> slovo;
- f >> s; //Считываем кол-во поясняющих строк + проверка на ошибку при вводе
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- ntxt = a;
- }
- else{
- cout << "Ошибка ввода кол-ва строк в элементе " << i+2 << endl;
- exit(0);
- }
- r->date.Slovo = slovo;
- r->date.count = ntxt;
- for (int i = 0; i < r->date.count+1; i++){
- getline(f, str);
- r->date.txt[i] = str;
- }
- r->next = 0;
- p->next = r;//связываем p и r
- //ставим на r указатель p (последний элемент)
- p = r;
- }
- return beg;//возвращаем beg как результат функции
- }
- void print(point* beg,int numb){ //Проход по списку до нужного элемента и вызов функции для вывода поясняющего текста
- point* p;
- p = beg;
- int j = 0;
- while (j < numb && p->next != NULL){
- p = p->next;
- j++;
- }
- if (j == numb){
- print_point(p);
- }
- }
- void Programm(){
- bool end = false, end2 = false;
- int slovo;
- char s, switc;
- string d, d2;
- int a;
- f >> d;
- a = atoi(d.c_str());
- d2 = to_string(a);
- if (d == d2){
- n = a;
- }
- else{
- cout << "Ошибка ввода кол-ва слов" << endl;
- exit(0);
- }
- point* beg;
- beg = make_list(n);
- cout << "Исходный список : " << endl;
- print_list(beg);
- do{
- cout << "Выберите операцию" << endl;
- cout << "1 - Получить справку по необходимому слову" << endl;
- cout << "2 - Вывести список всех слов в базе" << endl;
- cout << "3 - Выход" << endl;
- cin >> switc;
- switch (switc)
- {
- case ('1') :
- cout << endl;
- do{
- cout << "Введите номер слова для получения справки" << endl;
- cin >> d;
- a = atoi(d.c_str());
- d2 = to_string(a);
- if (d == d2){
- slovo = a;
- if (slovo <= n && slovo > 0){
- print(beg, slovo - 1);
- cout << endl;
- }
- else{ cout << "Слова с таким номером нет" << endl; }
- }
- else{
- cout << "Вы ввели не число" << endl;
- }
- do{
- cout << "Хотите получить ещё справку? y/n" << endl;
- cin >> s;
- if (s == 'y' || s == 'Y'){ end = false; break; }
- else if (s == 'n' || s == 'N'){ end = true; }
- else{ cout << "Ошибка ввода ответа" << endl; }
- } while (!end);
- } while (!end);
- break;
- case('2') : cout << endl; print_list(beg); cout << endl; break;
- case('3') : end2 = true; break;
- default:
- break;
- }
- } while (!end2);
- }
- void main(){
- setlocale(LC_ALL, "rus");
- Programm();
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment