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