Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ccomplica en 23 Noviembre 2013, 19:29 pm



Título: Ayuda para dividir una frase con Strtok
Publicado por: Ccomplica en 23 Noviembre 2013, 19:29 pm
Buenas tardes gente! Tengo en mi codigo un algoritmo para guardar en 3 variables de tipo Cadena, las palabras de la frase divididas por un caracter espacio. Pero necesito diferenciar y hacer que en el tercer parametro me divida pero dejando de tomar en cuenta los espacios, por ejemplo, en este momento si yo ingreso:

Hola hola123 hola

el algoritmo me guarda
comando=Hola
parametro1=hola123
parametro2=hola

en cambio si le ingreso....

Hola hola123 hola aasdas asdasd

ya no me guarda nada y me da segmentation fault.

Yo necesito ingresar en parametro2 una cadena que puede contener espacios tambien.

Aca el codigo:

Código
  1.        fgets(frase,100,stdin); //frase es un arreglo de caracteres de tamaño 100.
  2.        segmento=strtok(frase, " "); //parametro1, comando y parametro2 son un typedef char* Cadena
  3.        contador=0;
  4.        while(segmento!=NULL){
  5.             if(contador == 0)
  6.                comando=segmento;   // GUARDA EL COMANDO.
  7.  
  8.             if(contador == 1)
  9.                parametro1=segmento;    // GUARDA EL PRIMER PARAMETRO.
  10.  
  11.             if(contador == 2)
  12.                parametro2=segmento;    // GUARDA EL SEGUNDO PARAMETRO.
  13.  
  14.             segmento=strtok(NULL," ");
  15.             contador++;
  16.    }

como puedo modificarlo para que haga lo que yo quiero?


Título: Re: Ayuda para dividir una frase con Strtok
Publicado por: rir3760 en 24 Noviembre 2013, 19:19 pm
Para cambiar el separador solo tienes que cambiar la cadena pasada a strtok como segundo argumento (no tiene porque ser la misma en cada llamada).

Si el objetivo de ese fragmento solo es obtener un maximo de tres tokens (el comando y sus dos parametros) debes cambiarlo a:
Código
  1. fgets(frase, 100, stdin);
  2. parametro1 = NULL;
  3. parametro2 = NULL;
  4. contador = 0;
  5. if ((comando = strtok(frase, " ")) != NULL){
  6.   contador++;
  7.  
  8.   if ((parametro1 = strtok(NULL, " ")) != NULL){
  9.      contador++;
  10.  
  11.      if ((parametro2 = strtok(NULL, "\n")) != NULL)
  12.         contador++;
  13.   }
  14. }

Un saludo