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?
codice:
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);
}
}
nella main imposto che
struct string *testa=NULL;