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:
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?
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