Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <locale.h>
- struct list
- {
- list(char _elem = 0, list *_next = NULL) : elem(_elem), next(_next) { }
- char elem;
- list *next;
- };
- void print(list *l);
- char input(const char *path, list **l);
- int main()
- {
- setlocale(0, "");
- list *S = new list();
- char r = input("symbols.txt", &S);
- if (r != -1)
- print(S);
- return r != -1 ? 0 * _getch() : -1;
- }
- char input(const char *path, list **l)
- {
- FILE *stream = NULL;
- fopen_s(&stream, path, "r");
- if (stream)
- {
- char elem = 0;
- // p - добавляет элементы в l, dl - список удаленных из l элементов, dl_l - последний удаленный элемент в dl.
- list *p = *l, *dl = new list(), *dl_l = dl;
- while (fscanf_s(stream, "%c", &elem, 1) != EOF)
- {
- // is_u - элемент уникален в списке, off_dl - элемент не находится в dl.
- bool is_u = true, off_dl = true;
- // t - дубликат elem в l, t_pr - предыдущий t.
- list *t = *l, *t_pr = NULL;
- // Поиск elem среди удаленных элементов.
- for (list *d = dl; d && off_dl; d = d->next)
- off_dl = d->elem != elem;
- // Поиск дубликата elem в l.
- for (bool f = is_u && off_dl; f; )
- {
- is_u = t->elem != elem;
- if (is_u && t->next)
- {
- t_pr = t;
- t = t->next;
- }
- else f = false;
- }
- // elem прочитан из файла впервые.
- if (is_u && off_dl)
- {
- p->elem = elem;
- p->next = new list();
- p = p->next;
- }
- else if (off_dl)
- {
- // Добавление elem в dl.
- dl_l->elem = elem;
- dl_l->next = new list();
- dl_l = dl_l->next;
- // t - первый элемент в l.
- if (t == *l)
- *l = t->next;
- else
- t_pr->next = t->next;
- delete t;
- }
- }
- // Удаление dl.
- for (list *d = dl; d; )
- {
- list *t = d;
- d = d->next;
- delete t;
- }
- fclose(stream);
- return 0;
- }
- else
- {
- perror("Завершение работы программы");
- return -1;
- }
- }
- void print(list *l)
- {
- if (l)
- for (list *p = l; p; p = p->next)
- printf_s("%c", p->elem);
- else
- printf_s("Уникальные элементы не были обнаружены.");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement