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