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;
- cout << endl;
- p = p->next;//переход к следующему элементу
- }
- }
- point* make_list(int n)
- {
- point*beg;//указатель на первый элемент
- point*p, *r;//вспомогательные указатели
- string str;
- string slovo;
- int ntxt;
- beg = new(point);//выделяем память под первый элемент
- f >> slovo;
- f >> ntxt;
- 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 >> ntxt;
- 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 main(){
- setlocale(LC_ALL, "rus");
- bool end = false;
- int slovo;
- char s;
- f >> n;
- point* beg;
- beg = make_list(n);
- print_list(beg);
- do{
- cout << "Введите номер слова для получения справки" << endl;
- cin >> slovo;
- if (slovo <= n && slovo > 0){
- print(beg, slovo-1);
- 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);
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment