Удалить одинаковые слова из файлов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Такая вот задача. Есть два текстовых файла со словами, разделенными пробелами. Надо проверить, есть ли одинаковые слова в этих файлах и, если таковые найдены, удалить их из обоих файлов. Дополнительных массивов не использовать. Написать программу надо на простом С. Проблема у меня с самим удалением слов из файлов. Вот что у меня есть.
#include <stdio.h>
#include <string.h>
 
void main(){
FILE *f1,*f2;
char s1,*str1,*str2,*res1,*res2;
char line1[256],line2[256];
clrscr();
 
f1=fopen("1.txt","wt");
  if (f1==0)
printf("Oshibka chteniya!");
  else{
printf("Vvedite text 1:");
gets(s1);
fprintf(f1,"%s",s1);
  } fclose(f1);
 
f2=fopen("2.txt","wt");
  if (f2==0)
printf("Oshibka chteniya!!");
  else{
printf("Vvedite text 2:");
gets(s1);
fprintf(f2,"%s",s1);
  } fclose(f2);
 
f1=fopen("1.txt","rt");
f2=fopen("2.txt","rt");
fgets(line1,256,f1);
fgets(line2,256,f2);
res1=strtok(line1," ");
 
  while(res1!=NULL){
if(strstr(line2,res1)!=NULL)
/*и вот тут-то у меня затык*/
res1=strtok(NULL," ");
  }
 
fclose(f1);
fclose(f2);
getch();
}

Решение задачи: «Удалить одинаковые слова из файлов»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
FILE *f1,*f2,*f3,*f4,*f5;
char *tok1,*tok2;
int z=0;
char strf1[256],strf2[256];
int j;
clrscr();
f1=fopen("1.txt","wt");
fputs("some text file\n",f1);
fputs("blabla qwerty",f1);
f2=fopen("2.txt","wt");
fputs("qwerty asdfg\n",f2);
fputs("some text file",f2);
fcloseall();
f1=fopen("1.txt","rt");
f2=fopen("2.txt","rt");
f3=fopen("3.txt","wt");
fputs("There are such words in file 1 that are not in file 2:\n",f3);
f4=fopen("4.txt","wt");
fputs("There are such words in file 2 that are not in file 1:\n",f4);
f5=fopen("5.txt","wt");
fputs("There are such words in both files:\n",f5);
 
while(fgets(strf1,256,f1))
{
  ++z;
  printf("\nCycle %d, stringF1 %s\n",z,strf1);
  tok1=strtok(strf1," ");
  while(tok1!=NULL)
  {
    f2=fopen("2.txt","rt");
    while(fgets(strf2,256,f2))
    {
      printf("\nMiniCycle %d, stringF2 %s\n",z,strf2);
      if(strstr(strf2,tok1)==NULL)
      ;
      else
      {
        tok2=strstr(strf2,tok1);
        printf("Ptr comparsion strf2: %s\n",tok2);
        if(tok2!=NULL)
        {
          tok2=strtok(tok2," ");
          printf("Tok1 base: %s, Tok2 base: %s\n",tok1,tok2);
          while(tok2!=NULL)
          {
            if(strlen(tok1)==strlen(tok2))
            { j=0;
              printf("Length the same %s, %s, %d, %d\n",tok1,tok2,strlen(tok1),strlen(tok2));
              for(unsigned int i=0;i<strlen(tok1);++i)
              {
                if(tok1[i]!=tok2[i])
                ++j;
                fputs(tok2,f3);
              }
              if(j==0)
              {
                printf("------!!!Parts tok1 and tok2 are the same!!! %s, %s------\n",tok1,tok2);
                fputs(tok2,f5);
                fputs("\n",f5);
              }
            }
            tok2=strtok(NULL," ");
          }
        }
      }
    }
    printf("end of comparing %s\n",tok1);
    tok1=strtok(NULL," ");
    fclose(f2);
  }    
}
fcloseall();
getch();
}

Объяснение кода листинга программы

В этом коде происходит сравнение двух текстовых файлов на наличие одинаковых слов. Вот список действий, которые происходят в коде:

  1. Файлы 1 и 2 открываются для чтения, а файлы 3, 4 и 5 - для записи.
  2. В цикле, пока есть строки в файле 1, каждая строка обрабатывается следующим образом:
    • Строка разбивается на слова и сохраняется первое слово в переменной tok1.
    • Во внутреннем цикле, пока есть строки в файле 2, каждая строка проверяется на наличие слова tok1. Если слово найдено, выполняется следующая последовательность действий:
      • Слово tok2 из файла 2 сохраняется в переменной tok2.
      • Проверяется, являются ли слова tok1 и tok2 одинаковыми. Если они одинаковые, то в файл 3 записывается слово tok2.
      • Если слова не одинаковые, то проверяется, являются ли они похожими (длина слов одинаковая). Если да, то в файл 3 записывается слово tok2.
      • Если слова не одинаковые и не похожи, то в файл 5 записывается слово tok2.
  3. После обработки всех строк из файла 1, все файлы закрываются.
  4. Программа ожидает нажатия клавиши для завершения работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы