Ayuda para dividir una frase con Strtok

Iniciado por Ccomplica, 23 Noviembre 2013, 19:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Ccomplica

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 (cpp) [Seleccionar]
        fgets(frase,100,stdin); //frase es un arreglo de caracteres de tamaño 100.
        segmento=strtok(frase, " "); //parametro1, comando y parametro2 son un typedef char* Cadena
        contador=0;
        while(segmento!=NULL){
             if(contador == 0)
                comando=segmento;   // GUARDA EL COMANDO.

             if(contador == 1)
                parametro1=segmento;    // GUARDA EL PRIMER PARAMETRO.

             if(contador == 2)
                parametro2=segmento;    // GUARDA EL SEGUNDO PARAMETRO.

             segmento=strtok(NULL," ");
             contador++;
    }


como puedo modificarlo para que haga lo que yo quiero?

rir3760

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:
fgets(frase, 100, stdin);
parametro1 = NULL;
parametro2 = NULL;
contador = 0;
if ((comando = strtok(frase, " ")) != NULL){
   contador++;

   if ((parametro1 = strtok(NULL, " ")) != NULL){
      contador++;

      if ((parametro2 = strtok(NULL, "\n")) != NULL)
         contador++;
   }
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language