PDA

View Full Version : [C]Problema con funzione di ricerca all'interno di una lista ordinata


drewus
02-09-2011, 10:43
Questo è il codice:


struct libri
{
char name[MAX_LEN_TITLE];
int next;
}

struct libri *start = 0;
char book[MAX_BOOKS][MAX_LEN_TITLE];
int s = 1;

for(a = start; a; a = a->next, s++)
{
int i = 0;
for(; title[i] != a->title[i]; i++);
if(title[i] == a->title[i])
{
int num = 1;
for(; title[i + num] == a->title[i + num]; num++);
if(num == strlen(title))
{
book[s] = a->title;
}
continue;
}
}


Il problema è il seguente: solo se i titoli dei libri nel database iniziano con la mia stringa di ricerca, la funzione li trova(es. Titolo: caccia nel bosco, Stringa di ricerca: cac).
Qualche suggerimento?

clockover
02-09-2011, 11:19
Se la lista è ordinata allora avrai sicuramente una relazione d'ordine. Quindi non hai nessun problema. Usi quella relazione d'ordine e hai fatto. E siccome è ordinata puoi usare anche una ricerca binaria.

Inoltre puoi usare la funzione strncmp(char*, char*, size_t N) della libreria string.h per confrontare al massimo N caratteri della stringa http://linux.die.net/man/3/strncmp

drewus
02-09-2011, 12:11
Ok, grazie.