Título: Problema con C y Tokens Publicado por: spicecobra en 25 Agosto 2013, 02:52 am Hola, buenas!
Estoy con un enorme problema con C y los tokens. Todo surge de este código: Código: #include <stdio.h> #include <conio.h> #include <string.h> char *carga(int*,int); void busqueda(char*,char*); main() { int i=0,j=0, n=0, opc; char *palabra, *texto; do { printf("1- CARGA PALABRAS\n"); printf("2- CARGA PROGRAMA\n"); printf("3- BUSQUEDA\n"); printf("4- SALIR\n"); scanf(" %d", &opc); switch(opc) { case 1: { palabra=carga(&i,opc); break; }; case 2: { texto=carga(&j,opc); break; }; case 3: { busqueda(palabra, texto); break;}; }; } while(opc!=4); getche(); } char *carga(int *x,int y) { static char a[1000]; static char b[5000]; if(y==1) { while((a[*x]=getchar())!=EOF) { ++(*x); }; return a; } else { while((b[*x]=getchar())!=EOF) { ++(*x);}; return b; }; } void busqueda (char *z, char *w) { char *token1; token1 = strtok(w," \n"); while(token1!=NULL) { if ((strchr(z,(*token1))==NULL)) printf("%s\n", token1); token1 = strtok (NULL, " \n"); }; } La consigna es que ingrese una serie de palabras reservadas de un programa (opcion 1), que luego ingrese el programa (opcion 2); y que finalmente, cuando pulse la opcion 3: me muestre todas las palabras que no sean palabras reservadas. Hasta las cargas, está todo bien. Surge el problema con los tokens. Cuando llamo a la función por primera vez me marca dos o tres palabras que no son reservadas (cuando hay más), y cuando la vuelvo a llamar, me devuelve unicamente la primera. Algo está pasando con la función. Por favor, necesito ayuda! MUCHAS GRACIAS. Título: Re: Problema con C y Tokens Publicado por: eferion en 25 Agosto 2013, 18:11 pm Creo que tu codigo rompe la mayoria de las normas de codificacion. No es legible y tiene poco sentido. Me explico:
Código
No tiene sentido que unifiques las lecturas en una sola funcion si luego dicha funcion va a tener dos implementaciones diferentes. Ademas en vez de usar buffers estaticos dentro de la función deberias pasarlos como argumentos. Si eliminas los buffers estaticos vas a tener la misma implementacion para los dos casos. Y otras tantas mas, pero estoy con una tablet y es mas complicado escribir... si te speras a septiembre te comento mas detalles si quieres. Hablando de errores: strtok modifica la cadena que se le pasa como argumento. Para que todas las busquedas te devuelvan el mismo resultado tienes que copiar la lista de palabras en otro buffer y lanzar strtok pasando como argumento este segundo buffer. |