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

[SOLUCIONADO] Problemas con la función strtok

Estas en el tema de Problemas con la función strtok en el foro de C/C++ en Foros del Web. Hola a todos, a ver si alguien puede ayudarme por que no veo en que fallo. el problema es que el programa me compila pero ...
  #1 (permalink)  
Antiguo 28/12/2013, 18:51
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Problemas con la función strtok

Hola a todos, a ver si alguien puede ayudarme por que no veo en que fallo. el problema es que el programa me compila pero cuando lo ejecuto me da error.
Programa:

/*Programa que retorna la palabra más larga de una frase introducida (ignorando comas y puntos).*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define capacidad 255

int main()
{

//declaro tres cadenas
char frase[capacidad],*token,palabralarga[capacidad];

//pido al usuario una frase y se la asigno al vector frase
printf("Introduce una frase: \n");
gets(frase);


//extraigo el primer token y se lo asigno al vector "palabralarga"
token=strtok(frase," .,:;");
strcpy(palabralarga,token);


//creo un bucle para ir extrayendo tokens
while(token!=NULL){
token=strtok(NULL," .,:;");

/*dentro de dicho bucle: condicion de que si el tamaño del token es + grande que el tamaño de "palabralarga" se copie token encima de palabra larga*/
if(strlen(token)>strlen(palabralarga)){
strcpy(palabralarga,token);
}

}

//muestro "palabralarga"
printf("\n%s",palabralarga);

return 0;
}





Estoy haciendo 1º de DAM y son mis primeros ejercicios de cadenas de caracteres, si alguien fuese tan amable y me dijese en que fallo y que puedo hacer para solucionarlo le estaría agradecido.
  #2 (permalink)  
Antiguo 29/12/2013, 12:11
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 9 meses
Puntos: 83
Respuesta: Problemas con la función strtok

Te produce una violacion de segmento porque estas manejando mal el ciclo while. Cuando tienes un ciclo que controla una dato no nulo, lo ultimo que tienes que hacer antes de reentrar es actualizr el dato, en cambio tu estas actualizando el dato y sin comprovar la validez trabajas con ese dato.

Pero tranqui que la solucion es muy simple:

Código C:
Ver original
  1. token = strtok(frase," .,:;");
  2. strcpy(palabralarga, token);
  3.  
  4. while(token != NULL) {
  5.    //primero trabajas con el token
  6.     if(strlen(token) > strlen(palabralarga)) {
  7.         strcpy(palabralarga,token);
  8.     }
  9.    
  10.     //y la ultima operacion antes de reentrar es actualizar el token
  11.     token = strtok(NULL," .,:;");
  12. }

Saludos
vosk
  #3 (permalink)  
Antiguo 30/12/2013, 07:16
 
Fecha de Ingreso: noviembre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Problemas con la función strtok

Muchísimas gracias vosk, me has solucionado mi problema.
Un saludo muy grande.

Etiquetas: int, programa, string
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 22:54.