Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: euroesp en 8 Noviembre 2016, 03:08 am



Título: Error en programacion de LZW
Publicado por: euroesp en 8 Noviembre 2016, 03:08 am
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?.

Código:

#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.