zodiak1

Untitled

Mar 1st, 2022 (edited)
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <windows.h>
  5.  
  6. struct list
  7. {
  8.    list(char _elem = 0, list *_next = NULL) : elem(_elem), next(_next) { }
  9.    
  10.    char elem;
  11.    list *next;
  12. };
  13.  
  14. void print(list *l);
  15. void unique(list *l);
  16. char input(const char *path, list *l);
  17.  
  18. int main()
  19. {
  20.    setlocale(0, "");
  21.  
  22.    list *S = new list();
  23.  
  24.    input("symbols.txt", S);
  25.    unique(S);
  26.    print(S);
  27.    
  28.    return 0 * _getch();
  29. }
  30.  
  31. char input(const char *path, list *l)
  32. {
  33.    FILE *stream = NULL;
  34.    fopen_s(&stream, path, "r");
  35.  
  36.    if (stream)
  37.    {
  38.       list *p = l, *t = p;
  39.  
  40.       // Считываем все символы из файла.
  41.       for ( ; fscanf_s(stream, "%c", &p->elem, 1) != EOF; p->next = new list(), t = p, p = p->next);
  42.       delete p;
  43.       t = t->next = NULL;
  44.  
  45.       fclose(stream);
  46.       return 0;
  47.    }
  48.    else
  49.    {
  50.       perror("Завершение работы программы");
  51.       return -1;
  52.    }
  53. }
  54.  
  55. void unique(list *l)
  56. {
  57.    for (list *q = new list(0, l); q && q->next; q = q->next)
  58.    {
  59.       int dup_count = 0;
  60.       for (list *t = q->next; t->next; t = t->next) // Поиск всех дубликатов.
  61.       {
  62.          if (t->next->elem == q->next->elem) // Нашелся дубликат.
  63.          {
  64.             dup_count++;
  65.  
  66.             list *w = t->next->next;
  67.             delete t->next;
  68.             t->next = w;
  69.          }
  70.       }
  71.  
  72.       if (dup_count)
  73.       {
  74.          list *w = q->next->next;
  75.          delete q->next;
  76.  
  77.          if (w) *(q->next) = *w;
  78.          else q->next = NULL;
  79.       }
  80.    }
  81. }
  82.  
  83. void print(list *l)
  84. {
  85.    printf_s("Результат работы программы: \n");
  86.    for (list *p = l; p; p = p->next)
  87.       printf_s("%c", p->elem);
  88. }
Add Comment
Please, Sign In to add comment