Advertisement
SneakyElf

20.1

Sep 6th, 2022
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.85 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     FILE *f;
  6.     fpos_t end, ind_cr, ind_cp, temp;
  7.     char current, comp, next;
  8.     int flag = 0;
  9.  
  10.     if(!(f=fopen("file", "r+t")))
  11.     {
  12.         printf("Невозможно открыть файл");
  13.         return -1;
  14.     }
  15.  
  16.     while(!feof(f))
  17.     {
  18.         fscanf(f, "%c", &current);
  19.         if(feof(f)) break;
  20.         printf("%c", current);
  21.     }
  22.  
  23.     end = ftell(f);    //определение позиции конца строки
  24.  
  25.     rewind(f);
  26.  
  27.     while(ftell(f) != end-1)
  28.     {
  29.         fscanf(f, "%c", &current);    //считывание исходного символа
  30.         fgetpos(f, &ind_cr);    //запоминается его позиция
  31.  
  32.         while(ftell(f) != end)
  33.         {
  34.             fscanf(f, "%c", &comp);    //считывания последующих символов для поиска совпадений
  35.             temp = ftell(f);
  36.             if(current == comp)    //если найдено совпадение
  37.             {
  38.                 flag = 1;    //поднимается флаг
  39.  
  40.                 fseek(f, -1, 1);
  41.  
  42.                 while(ftell(f) != end)
  43.                 {
  44.                     fgetpos(f, &ind_cp);    //запоминается позиция очередного символа
  45.                     fseek(f, 1, 1);
  46.                     fscanf(f, "%c", &next);    //считывается символ, следующий за текущим
  47.  
  48.                     fsetpos(f, &ind_cp);
  49.                     fprintf(f, "%c", next);    //исключение comp из строки
  50.                 }
  51.  
  52.                 end--;    //искусственное обрезание строки
  53.  
  54.                 fsetpos(f, &temp);    //обеспечение перехода к следующему символа для сравнения
  55.                 fseek(f, -1, 1);
  56.             }
  57.         }
  58.  
  59.         if(!flag)    //если совпадений не найдено
  60.             fsetpos(f, &ind_cr);
  61.  
  62.         temp = ind_cr;
  63.         if(flag)    //после удаления совпадений, исключается из строки и исходный
  64.         {
  65.             fsetpos(f, &ind_cr);
  66.             fseek(f, -1, 1);
  67.  
  68.             while(ftell(f) != end-1)
  69.             {
  70.                 fgetpos(f, &ind_cr);
  71.                 fseek(f, 1, 1);
  72.                 fscanf(f, "%c", &next);
  73.  
  74.                 fsetpos(f, &ind_cr);
  75.                 fprintf(f, "%c", next);
  76.             }
  77.  
  78.             flag = 0;
  79.  
  80.             end--;
  81.  
  82.             fsetpos(f, &temp);
  83.             fseek(f, -1, 1);
  84.         }
  85.     }
  86.  
  87.     printf("\n");
  88.     rewind(f);
  89.     while(ftell(f) != end)
  90.     {
  91.         fscanf(f, "%c", &current);
  92.         if(feof(f)) break;
  93.         printf("%c", current);
  94.     }
  95.  
  96.     printf("\n\n");
  97.     fclose(f);
  98.  
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement