Advertisement
zodiak1

Untitled

Mar 3rd, 2022
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.79 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.    bool dupls = false;
  11.  
  12.    char elem;
  13.    list *next;
  14. };
  15.  
  16. void print(list *l);
  17. void unique(list **l);
  18. char input(const char *path, list *l);
  19.  
  20. int main()
  21. {
  22.    setlocale(0, "");
  23.  
  24.    list *S = new list();
  25.  
  26.    input("symbols.txt", S);
  27.    unique(&S);
  28.    print(S);
  29.  
  30.    return 0 * _getch();
  31. }
  32.  
  33. char input(const char *path, list *l)
  34. {
  35.    FILE *stream = NULL;
  36.    fopen_s(&stream, path, "r");
  37.  
  38.    if (stream)
  39.    {
  40.       char elem = 0;
  41.       list *p = l, *pre = p;
  42.       // Считываем все символы из файла.
  43.       for ( ; fscanf_s(stream, "%c", &elem, 1) != EOF && p; )
  44.       {
  45.          bool isUnique = true;
  46.          for (list *q = l; q && isUnique; q = q->next)
  47.          {
  48.             if (q->elem == elem)
  49.             {
  50.                q->dupls = true;
  51.                isUnique = false;
  52.             }
  53.          }
  54.          if (isUnique)
  55.          {
  56.             p->elem = elem;
  57.             p->next = new list();
  58.             pre = p;
  59.             p = p->next;
  60.          }
  61.       }
  62.       delete p;
  63.       pre->next = NULL;
  64.  
  65.       fclose(stream);
  66.       return 0;
  67.    }
  68.    else
  69.    {
  70.       perror("Завершение работы программы");
  71.       return -1;
  72.    }
  73. }
  74.  
  75. void unique(list **l)
  76. {
  77.    for (list **p = l; *p; )
  78.    {
  79.       if ((*p)->dupls)
  80.       {
  81.          list *w = (*p)->next;
  82.          delete *p;
  83.  
  84.          *p = w;
  85.       }
  86.       else p = &(*p)->next;
  87.    }
  88. }
  89.  
  90. void print(list *l)
  91. {
  92.    printf_s("Результат работы программы: \n");
  93.  
  94.    if (!l)
  95.       printf_s("Уникальные элементы не были обнаружены.");
  96.    else
  97.       for (list *p = l; p; p = p->next)
  98.          printf_s("%c", p->elem);
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement