PDA

View Full Version : [C] aiuto su qsort


Gr1ph00n
21-06-2009, 18:23
Salve a tutti, stavo cercando di capire come far funzionare la qsort su un array allocato dinamicamente, contenente un puntatore ad una struttura.
Ora andando a scrivere la funzione per comparare, mi sono trovato a dover fare il cast da void* alla mia struttura. Quello che devo fare è ordinare in ordine alfabetico l'array usando un dato campo delle strutture in esse contenuto.

La struttura è la seguente:

typedef struct _rubrica
{
char cognome[30];
char nome[30];
char numero[30];
} rubrica;


Io ho scritto la seguente funzione per comparare:




int confronta(const void *a, const void*b)
{
rubrica *ia = (rubrica*)a;
rubrica *ib = (rubrica*)b;
char p[30];
char q[30];
strcpy(p, ia->cognome);
strcpy(q, ib->cognome);
int c1 = p[0], c2 = q[0];
if (c1 < c2)
{
return 1;
}
else if (c1 > c2)
{
return -1;
}
else
{
return 0;
}
}


usando così la qsort:


qsort(array, elem, sizeof*array, confronta);


Ma non funziona :muro:
Chi mi potrebbe illuminare sul corretto utilizzo della qsort, per favore :help: ?

wingman87
21-06-2009, 21:47
Usa la strcmp -> LINK (http://www.cplusplus.com/reference/clibrary/cstring/strcmp/) senza stare a ricopiare le stringhe che sprechi solo memoria.

Gr1ph00n
22-06-2009, 10:08
Ciao, ho risolto perchè oltre a dover usare la strcmp, dovevo eseguire meglio il cast da void a rubrica :muro:


int confronta(const void *a, const void*b)
{
const rubrica *r1 = *(const rubrica *const *)a;
const rubrica *r2 = *(const rubrica *const *)b;
return strcmp(r1->cognome, r2->cognome);
}