Esercizio sulle liste

di il
2 risposte

Esercizio sulle liste

Buongiorno a tutti.
Sono alle prese con un esercizio in C sulle liste: devo creare una lista di parole con funzione inserisci e stampa..fin qui ci sono! Ora mi viene chiesto di aggiungere una funzione che scorrendo la lista di parole trovi quella più lunga e la stampi.La mia idea era questa:

void VisualizzaParolaPiuLungaLista(PuntLista L)
{
  int maxLunghezza=0;
  char ParolaPiuLunga[]="";
  while(L==NULL)
  {
    if( sizeof(L->parola)> maxLunghezza )
    {
      maxLunghezza=sizeof(L->parola);            
      strcpy(ParolaPiuLunga,L->parola);
     }
   L=L->next; 
  }                             
  printf("La parola piu lunga della lista e' %s\n",ParolaPiuLunga);
}         
Ma mi rendo conto io stesso che non aggiorna il numero maxLunghezza come dovrebbe..Aiutino?

2 Risposte

  • Re: Esercizio sulle liste

    Ciao Giovannizt,
    per avere la lunghezza di una stringa si usa la funzione strlen() e non sizeof.
  • Re: Esercizio sulle liste

    Oltre alla correzione fatta da barba59, c'è un altro errore derivante dal fatto che ParolaPiuLunga ha una lunghezza massima di 1 ( ParolaPiuLunga[] = "" ) e non ha quindi spazio per memorizzare al suo interno parole più lunghe di 1 carattere.

    Una soluzione è:
    
    
    char *ParolaPiuLunga = NULL;
    
    while ( L ) {
     [.. trovi una parola più lunga .. ]
     if ( ParolaPiuLunga )
          free (ParolaPiuLunga);
          ParolaPiuLunga = strdup (L->parola);
     }
    
     if ( ParolaPiuLunga ) {
          printf ("La parola piu lunga e': %s\n", ParolaPiuLunga);
          free (ParolaPiuLunga);
     }
    
    P.s.: Ma com'è che va di moda st'esercizio in questi giorni? XD
Devi accedere o registrarti per scrivere nel forum
2 risposte