我试图实现 LZ 压缩....并试图使用它来压缩一些文件....但是我遇到了一些逻辑问题...我真的不知道如何存储数据返回文件...真正的问题是:假设我现在有一个匹配的字符串“ls”[表中的条目已经在第 289 个索引处完成] 如果将文件中的 289 替换为 ls 那么该怎么做? ? 因为如果较早的“ls”占用 2 个字节,那么现在 289 将占用 3 个字节。如果以上是正确的,那么为什么这种方法称为压缩,如果不是,那么正确的方法是什么……我只需要一个答案,特别是详细地阐明我对这个逻辑的了解。
我到现在为止制作的一些代码:
int main()
{
int id,flag,d;
char ch,a[2],newstr[1000],currstr[1000];
FILE *fr;
FILE *fw;
createTable();
fr=fopen("old.txt","rb");
fw=fopen("new.txt","wb");
flag=0;
fscanf(fr,"%c",&ch);
fprintf(fw,"%c",ch);
a[0]=ch;
a[1]='\0';
strcpy(currstr,a);
while(!feof(fr))
{
showTable();
fscanf(fr,"%c",&ch);
a[0]=ch;
a[1]='\0';
strcat(currstr,a);
strcpy(newstr,currstr);
id=lookTable(newstr);
if(id!=5000)
{
strcpy(currstr,newstr);
flag=1;
d=id;
}
else
{
if (flag==0)
{
fprintf(fw,"%s",a);
}
else
{
fprintf(fw,"%d",d);
printf("%d new data\n",d);
}
addEntry(newstr);
strcpy(currstr,a);
flag=0;
}
}
fprintf(fw,"%s",currstr);
fclose(fr);
fclose(fw);
return 0;
}