CCCPaste

36c5f8135688c

#include 
#include 
#include 
#include 

struct list
{
   list(char _elem = 0, list *_next = NULL) : elem(_elem), next(_next) { }

   bool dupls = false;

   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)
   {
      char elem = 0;
      list *p = l, *pre = p;
      // Считываем все символы из файла.
      for ( ; fscanf_s(stream, "%c", &elem, 1) != EOF && p; )
      {
         bool isUnique = true;
         for (list *q = l; q && isUnique; q = q->next)
         {
            if (q->elem == elem)
            {
               q->dupls = true;
               isUnique = false;
            }
         }
         if (isUnique)
         {
            p->elem = elem;
            p->next = new list();
            pre = p;
            p = p->next;
         }
      }
      delete p;
      pre->next = NULL;

      fclose(stream);
      return 0;
   }
   else
   {
      perror("Завершение работы программы");
      return -1;
   }
}

void unique(list **l)
{
   for (list **p = l; *p; )
   {
      if ((*p)->dupls)
      {
         list *w = (*p)->next;
         delete *p;

         *p = w;
      }
      else p = &(*p)->next;
   }
}

void print(list *l)
{
   printf_s("Результат работы программы: \n");
 
   if (!l)
      printf_s("Уникальные элементы не были обнаружены.");
   else
      for (list *p = l; p; p = p->next)
         printf_s("%c", p->elem);
}