私は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;
}