-5
我試圖實現LZ壓縮....並試圖壓縮一些文件使用它....但我有一些合乎邏輯的問題... 我真的沒有任何想法如何將數據存儲迴文件... 真正的問題是:假設我有一個匹配的字符串「ls」[誰的表中的條目已經完成了,我們假設第289個索引]現在如果在文件中將ls替換爲289那麼怎麼做呢? ,因爲如果早些時候「ls」花了2個字節,那麼現在289將需要3個字節。 如果上述情況屬實,那麼爲什麼這種方法稱爲壓縮,如果不是,那麼正確的方法是什麼...... 我只是需要一個答案來澄清我對這個邏輯的詳細說明。LZ壓縮技術
一些代碼,我已經做至今:
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;
}