J'essayais de mettre en œuvre la compression LZ .... et essayait de compresser certains fichiers en utilisant .... mais j'ai un problème logique ... Je ne sais pas vraiment au sujet de comment les données doivent être stockées dans le fichier ... le vrai problème est: supposons que j'ai une chaîne correspondante "ls" [dont l'entrée dans la table est déjà faite au 289e index] maintenant si remplacer 289 par ls dans le fichier alors comment ça se fait? parce que si "ls" Plus tôt a pris 2 octets alors maintenant 289 prendra 3 octets. Si ci-dessus est vrai alors pourquoi cette méthode est appelée compression et si non alors quelle sera la bonne méthode ... J'ai juste besoin d'une réponse qui me clarifie sur cette logique en détail.LZ technique de compression
Une partie du code que j'ai fait jusqu'à présent:
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;
}