Problema con ordinamento array di stringhe

di il
2 risposte

Problema con ordinamento array di stringhe

Allora, il problema è il seguente: sto scrivendo un programma riguardante una corsa di ciclisti, ed ho un vettore "int tempo[]={0,0,0,0,0}" dove memorizzo i tempi dei ciclisti, e un array di stringhe chiamato classifica (char classifica[5][20]) dove memorizzo i nomi dei ciclisti, e che una volta ordinato riporta in ordine i nomi della classifica. Premetto che in tempo[0] trovo il tempo del primo ciclista, e in classifica[0] il nome del primo ciclista (questa corrispondenza vale anche per gli altri ciclisti).

Ora, vorrei sfruttare un algoritmo di ordinamento per ordinare il vettore tempo, e in contemporanea il l'array di stringhe, ho provato in questo modo:
    int tempo[]={0,0,0,0,0};
    char classifica[5][20],  el2[20];
int main()
{
    for (i=1;i<5;i++) {                                                 // ordinamento tempi e ciclisti
        el1 = tempo[i];
        el2[19] = classifica[i][19];
        j = i-1;
        while(j>=0 && el1 < tempo[j]) {
            tempo[j+1] = tempo[j];
            classifica[j+1][19] = classifica[j][19];
            j--;
        }
        tempo[j+1] = el1;
        classifica[j+1][19] = el2[19];
    }


    for (i=0; i < 5; i++) {
    printf("Al primo posto abbiamo %s con un tempo di %d.\n",  classifica[i], tempo[i]);
    }


    return 0;
}
Alla fine però i tempi risultano ordinati, ma i nomi non coincidono più con i tempi. Dov'è che sbaglio?

2 Risposte

  • Re: Problema con ordinamento array di stringhe

    1)La swap dei due elementi non la fai
    2)La stringa la devi copiare 'fisicamente' e non l'indirizzo
    
    void my_sort (char classifica[][20], int tempo[5])
    {
      int i,n=5;
      
      char tmp_classifica[20];
      int  tmp_tempo;
      
      while (n)
      {
        for (i=0;i<n-1;i++)
        {
          if (tempo[i]>tempo[i+1])
          {
            tmp_tempo=tempo[i];
            strcpy (tmp_classifica,classifica[i]);
            tempo[i]=tempo[i+1];
            strcpy (classifica[i],classifica[i+1]);
            tempo[i+1]=tmp_tempo;
            strcpy (classifica[i+1],tmp_classifica);
          }
        }
        n--;
      }
    }
    
    
  • Re: Problema con ordinamento array di stringhe

    Max ti ringrazio, grazie a te ho completato il progetto in tempo e finito la relazione. Hai la mia eterna gratitudine! (se passi per Napoli ti offro qualcosa ).

    Appena finiti gli esami, quando potrò dedicarmi con più calma allo studio del C, penso che verrò di nuovo a disturbarti con qualche domanda da principiante

    Grazie ancora, notte!
Devi accedere o registrarti per scrivere nel forum
2 risposte