Foros del Web » Programación para mayores de 30 ;) » C/C++ »

dividir subcadenas en otras subcadenas

Estas en el tema de dividir subcadenas en otras subcadenas en el foro de C/C++ en Foros del Web. Hola amigos, Tengo un problema con el siguiente código @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original #include <stdio.h> #include <stdlib.h> #include <string.h> int main ( ) ...
  #1 (permalink)  
Antiguo 01/11/2011, 16:51
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
dividir subcadenas en otras subcadenas

Hola amigos,

Tengo un problema con el siguiente código

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main () {
  5.     char ptrCamposub[50];
  6.     strcpy(ptrCamposub,"5-1/3|6-1/6|7-1/2");
  7.     //printf("%s\n",ptrCamposub);
  8.     char *ptrCadena1;
  9.     char ptrCadena1Aux[10];
  10.     char *ptrSubcad;
  11.     ptrCadena1 = strtok(ptrCamposub,"|");
  12.     while(ptrCadena1 != NULL)
  13.     {
  14.         strcpy(ptrCadena1Aux,ptrCadena1);
  15.         ptrSubcad = strtok(ptrCadena1Aux,"-");
  16.         while(ptrSubcad != NULL)
  17.         {
  18.             printf("%s\n",ptrSubcad);
  19.             ptrSubcad = strtok(NULL, "-");
  20.         }  
  21.         printf("%s\n",ptrCadena1Aux);                                          
  22.         ptrCadena1 = strtok(NULL, "|");
  23.     }
  24.     return 0;
  25. } /* fin de main */

Pues resulta que quiero dividir una cadena ya dividida en otra, no entiendo porque aunque trabaje con una copia de la cadena ya dividida (ptrCadena1) al quererla dividir en mas secciones (ptrSubcad) no logro hacerlo, ya probé creando una copia de ptrCadena1 en ptrCadena1AUX y obtengo el mismo resultado

Código C:
Ver original
  1. 5
  2. 1/3
  3. 5

Me npueden ayudar con esto por favor, he pasado un buen rato buscándole y no le encuentro.

Desde ya les agradezco sus respuestas.

SAludos
  #2 (permalink)  
Antiguo 02/11/2011, 09:14
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: dividir subcadenas en otras subcadenas

strtok funciona en 2 modos:
- establecer string a buscar y delimitador
- buscar

Para que "buscar" funcione, hay que "especificar" / "establecer". Si vuelves a "establecer", vale lo ultimo especificado. El "buscar" se reconoce pues usas NULL como string a buscar.

En el codigo mostrado, hay un strtok( NULL, "|" ) que no especifica su string, por tanto es un "buscar", y por lo tanto, no te va a funcionar como esperas: que busque en el string original.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 02/11/2011, 14:42
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: dividir subcadenas en otras subcadenas

Hola,

Gracias por responder, a ver si entendí, el problema está en la línea ptrCadena1 = strtok(NULL, "|"); esa línea le indico que siga buscando al siguiente token dividido por "|" si lo modifico se me vuelve un bucle infinito, siempre con el primero, lo que yo busco es hacer subcadenas de cada token que se va extrayendo. Ya lo he prbado con ptrCadena1 = strtok(ptrCadena1, "|"); dentro del bucle pero ahí es donde se me torna infinito.

Cómo se especificaría entonces el código en este caso?

Saludos
  #4 (permalink)  
Antiguo 02/11/2011, 19:20
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: dividir subcadenas en otras subcadenas

Tengo la impresion que strtok() usa internamente variables static para conservar el estado entre una invocacion y otra, de modo que invocarla 2 veces hace que pierda el estado anterior. Dicho de otra forma, es como asignar 2 veces la misma variable
i = 5;
i = 3; // el valor 5 se pierde, no se puede recuperar

Sugiero que invoques strtok() con los 2 delimitadores que te sirven "|-" o con todos los delimitadores que te sirven, y con una maquina de estados deduzcas en que lugar de la division estas. strtok() recibe como 2do parametro todos los delimitadores a usar, no estas limitado a usar solo 1.
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 03/11/2011, 16:58
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: dividir subcadenas en otras subcadenas

Hola,

Muchas gracias, funciona para lo que necesitaba.

Saludos

Etiquetas: dividir, string, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:44.