Buenas,
Me he propuesto programar un compresor LZW que me comprima un archivo llamado "quijote.txt". He programado el algoritmo que creo que deberia funcionar, pero no lo hace. ¿Podrían decirme donde esta el error?.
Cabe destacar que el documento a comprimir tiene letras, simbolos y espacios en blanco, todos incluidos en el model ASCI.
Gracias por adelantado.
Me he propuesto programar un compresor LZW que me comprima un archivo llamado "quijote.txt". He programado el algoritmo que creo que deberia funcionar, pero no lo hace. ¿Podrían decirme donde esta el error?.
Código [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define dim1 1000
#define dim2 2000
int main(){
size_t totCarac = 1000;
size_t totCarac2 = 2000;
char *palabras[100000] = {" ","a","b","c","d","e","f","g","h","i","j","k","l","m","n","ñ","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","Ñ","O","P","Q","R","S","T","U","V","W","X","Y","Z","Á","É","Í","Ó","Ú","á","é","í","ó","ú","À","È","Ì","Ò","Ù","à","è","ì","ò","ù","Ä","Ë","Ï","Ö","Ü","ä","ë","ï","ö","ü","!","¡","?","¿","#","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","]","^","_","`","{","}","ç","|","~","«","»","¬","·","€","$"};
char P[dim1] = "", C[dim1] = "";
char *PC = ( char* )malloc( totCarac2 * sizeof(char) );
int i1,i2,i3,i4,valor1,valor2,indice1,indice2,componente;
FILE* quijote = NULL;
FILE* quijotec = NULL;
quijote = fopen("quijote.txt", "r");
quijotec = fopen("quijotec.txt", "w");
fscanf(quijote,"%c",&P);
fscanf(quijote,"%c",&C);
componente = 133;
printf("%c \n",P); <------- este print me da algo que no corresponde con el primer caracter del archivo
while (!feof(quijote)){
PC = strcpy(PC,P);
PC = strcat(PC,C);
for(i3=1;i3<=100000;i3++){
valor1 = strcmp(PC,palabras[i3-1]);
if (valor1 == 0){
indice1 = i3;
P2 = strcpy(P,PC);
goto Palma1;
}
}
palabras[componente] = strcpy(palabras[componente],PC);
for(i4=1;i4<=100000;i4++){
valor2 = strcmp(P,palabras[i4-1]);
if (valor2 == 0){
indice2 = i3;
goto Palma2;
}
}
Palma2:
fprintf(quijotec, "%i ", indice2);
P2 = strcpy(P,C);
fscanf("%c",&C);
Palma1:
}
fclose(quijote);
fclose(quijotec);
printf("Fin");
return 0;
}
Cabe destacar que el documento a comprimir tiene letras, simbolos y espacios en blanco, todos incluidos en el model ASCI.
Gracias por adelantado.