Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/05/2015, 21:11
jose_27
 
Fecha de Ingreso: febrero-2015
Mensajes: 20
Antigüedad: 9 años, 2 meses
Puntos: 0
comparar cadenas de un archivo,imprime basura

Hola tengo dos problemas con mi codigo, por consola yo leo dos un entero y una cadena por ahora la opcion dos aun no la desarrollo eso es despues, pero la primera opcion es que tengo que la cadena sera de un maximo valor de 50 digitos en binarios que de ahi tengo que tomar cada 5 digitos que representa un valor en binario.

de un archivo llamado "reglas.txt" contiene en cada línea alguna letra del abecedario (solo mayusculas) de la A-Z y numeros de 1-4

este es el ejemplo de como funciona:
reglas.txt

G 00000
Z 11001
K 00011
.
.
.
.
1 01110

Las letras en el archivo no necesariamente están en orden alfabético,
igualmente los números tampoco están en orden. La idea es que las cadenas de
entrada tengan un significado diferente según el archivo de reglas. Todas las letras y
números mencionados anteriormente deben estar incluidos en las reglas con su
respectiva codificación en binario.

Si la entrada fuera 1 00000110010111000000, se tiene que escribir el mensaje
decodificado en un archivo de salida, cada entrada es una línea en la salida. Para el
ejemplo anterior, en el archivo salida se escribe GZ1G. Todo esto con las reglas
definidas antes.

yo use printf para imprimir y ver si estaba haciendo todo correcto y si me imprime la letra pero me imprime tambien unas cosas extrañas :(

y mi otro problema es que ese primer arreglo que toma los 5 digitos agarro y lo comparo con la cadena que estara en el arreglo reglas.txt hasta que encuentre que son iguales, pero no se como hacer para que ese arreglo vuelva a picar 5 digitos de la cadena grande pero ahora de 5 a 9 lo que hice fue ponerle un contador que fuera sumando y siempre se sumara de 5 en cinco pero no se como podria hacer esa parte de que vaya probando cada 5 digitos ya la compracion la tengo pero esa parte no se

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>  
  3. #include <math.h>  
  4. #include <string.h>
  5.  
  6. int main (int argc, char *argv[]) {
  7.     int i=0,j=0,k=0,l=0,m=0,n=0;
  8.     char bin[50],str1[5],letra,op,ArrSol[20]; //Donde se guarda resultado final,coloqué índice 20 por ser random en la vida
  9.  
  10.     int caracter,ret;
  11.     int v=0, z=5;
  12.     char array[5];
  13.     int conta;
  14.     FILE *reglas;
  15.  
  16.     scanf("%c %s",&op,bin);
  17.        
  18. if(op=='1'){ //Opción 1
  19.     reglas=fopen(argv[1],"r"); //abriendo archivo reglas
  20.    
  21.     while (bin[i]!= ' '){
  22.             for (v=0;v<z;v++){
  23.                 array[v]=bin[v];
  24.                 conta++;
  25.             }
  26.             i++; //Agregué esto
  27.     }// y esto
  28.    
  29.      if(reglas==NULL){
  30.      printf("Error en el archivo");
  31.      }else{
  32.         while (!feof(reglas)){
  33.             fscanf(reglas,"%c %s",&letra,&str1); //Aquí da un error que se resuelve colocando un índice-> &str1[j]
  34.                                                 //Pero igual guarda sin colocarle el índice
  35.             char word;
  36.              word=letra;
  37.              ret=strncmp(array,str1,5);
  38.            
  39.             if (ret==0){    
  40.              ArrSol[k]=letra;
  41.              printf("%s",ArrSol); //Coloqué que imprimiera para probar, si guarda la letra peeroo...
  42.             }
  43.         }
  44.        
  45.      
  46.       }
  47.  
  48.  
  49. }
  50.  
  51. fclose(reglas);
  52.  
  53. return 0;
  54. }