Ciao ragazzi,
devo inserire delle stringhe in una lista, aggiornandone solo il numero di occorrenze nel caso in cui la stringa sia già presente. Il codice che ho scritto è il seguente ma mi dà problemi nell'inserimento. In particolare non riesce a effettuare il controllo del campo word con la parola da inserire, e mi dice in continuazione che la lista è vuota..qualcuno può aiutarmi?
nella main imposto checodice:struct stringa { char *word; int number; struct parola *next; }; void inserisci(char *w, struct stringa *punt) { //devo allocare spazio per il nuovo elemento struct stringa *nuova; nuova=alloca_memoria(); //alloco spazio per il campo char *word if((nuova->word=(char *)malloc(strlen(w)+1))==NULL) { fprintf(stderr, "Errore allocazione memoria\n"); exit(EXIT_FAILURE); } //copia della parola printf("copio\n"); strcpy(nuova->word,w); nuova->occorrenze=1; printf("occorrenza aggiornata\n"); //aggiorno puntatori punt=nuova; nuova->next=NULL; printf("puntatori aggiornati\n"); } void controlla(char *word, struct stringa *testa) { struct stringa *p; //per appoggio int trovata=0; //flag p=testa; //se la lista è vuota devo per forza inserirla if(p==NULL) { printf("lista vuota\n"); inserisci(word,testa); } //se la lista non è vuota, la scorro e controllo se c'è la parola else { //scorri la lista for(p=testa; p->next==NULL || trovata==0 ; p=p->next) { if(strcmp(p->word,word)==0) { printf("gia in lista!!!!\n"); //aggiorno solo le occorrenze (p->number)++; trovata=1; } } //se alla fine non l'ho trovata, la inserisco inserisci(word,p); } }
struct string *testa=NULL;

Rispondi quotando