Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema con funzione di ricerca all'interno di una lista ordinata
Forum - C/C++ - Problema con funzione di ricerca all'interno di una lista ordinata

Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 11:40
Venerdì, 02/09/2011
Questo è il codice:

Codice sorgente - presumibilmente C++

  1. [CODE]
  2. struct libri
  3. {
  4. int code;
  5. char title[MAX_TITLE_LEN];
  6. char des[MAX_DES_LEN];
  7. struct libri *next;
  8. };
  9.  
  10. struct libri *start = 0;
  11.  
  12. struct libri ***search(const char title[])
  13. {
  14.     struct libri **books = (struct libri**) malloc(sizeof(struct libri*));
  15.     if(!books)
  16.     {
  17.         puts("Ricerca interrotta");
  18.     }
  19.     books[0] = start;
  20.     struct libri ***point;
  21.     struct libri *a = (struct libri*)malloc(sizeof(struct libri));
  22.     if(!a)
  23.     {
  24.         puts("Ricerca interrotta");
  25.     }
  26.     int s = 1;
  27.     for(a = start; a; a = a->next)
  28.     {
  29.         if(strstr(a->title, title))
  30.         {
  31.             books = (struct libri **) realloc(books, sizeof(struct comp*) * (s + 1));
  32.             if(!books)
  33.             {
  34.                 puts("Ricerca non completata");
  35.                 goto ret;
  36.             }
  37.             point = &books;
  38.             (*point)[s] = a;
  39.             s++;
  40.         }
  41.     }
  42.     (*point)[0]->code = s - 1;
  43. ret:
  44.     return point;
  45. }
  46.  
  47. [/CODE]



Ho risolto i problemi precedenti, ma ne restano due:
- L'elemento 0 del vettore books è uguale all'elemento 1(notato durante l'esecuzione del programma)
- Se avvio la ricerca in un database vuoto l'istruzione "(*point)[0]->code = s - 1;", restituisce errore.

Ultima modifica effettuata da drewnik99 il 02/09/2011 alle 20:08
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
2
Down
V
Segnala al moderatore
Postato alle 12:02
Venerdì, 02/09/2011
Usa strstr:
http://www.cplusplus.com/reference/clibrary/cstring/strstr/

P.S.: che senso ha confrontare a, che è un puntatore a struct, con strlen, che è un banale intero? Dov'è la definizione di title? Dove viene inizializzato? A cosa serve il terzo for, dato che poi num non viene nemmeno nominato?

Scusa, ho sbagliato a riportare, era num non a. - drewnik99 - 02/09/11 12:28
Ho apportato qualche modifica. Ho postato la funzione completa - drewnik99 - 02/09/11 16:01


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM