Visto che ieri siete stati così gentile, ne approfitto
Devo leggere da un file un'elenco di parole e creare una lista di struct conteneti la parola e il numero di volte che questa compare nell'elenco. Poi devo stampare il tutto.
Ho fatto il programmino però l'ultima parola viene letta due volte e non ne capisco il motivo. Ho allegato il file parole.c al messaggio. Il file da leggere è del tipo:
gatto
cane
pesce
cinghiale
pesce
fringuello
cane
cinghiale
toro
topo
Forse non si può allegare il file .c quindi lo metto qua
codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _WORD{
char *parola;
int num;
struct _WORD *next;
} WORD;
WORD *head=NULL;
void AddUpdate(char *parola);
void Add(char *parola);
void PrintList();
void Update(WORD *W);
int main(int argc, char *argv[]){
FILE *fpin;
char tmp[80+1];
int len;
if((fpin=fopen(argv[1], "r")) == NULL ){
printf("Errore apertura file %s", argv[1]);
}
while(!feof(fpin)){
fgets(tmp, 80, fpin);
AddUpdate(tmp);
}
PrintList();
}
void AddUpdate(char *parola){
WORD *W;
int i, flag=0;
for(W=head; W!=NULL; W=W->next){
if(strcmp(W->parola, parola)==0){
Update(W);
flag=1;
}
}
if(flag==0){
Add(parola);
}
}
void Add(char *parola){
WORD *W;
W=malloc(sizeof(WORD));
W->num=1;
W->parola=strdup(parola);
/*Inserimento in testa*/
W->next=head;
head=W;
}
void Update(WORD *W){
W->num++;
}
void PrintList() {
WORD *W=head;
while(W!=NULL){
printf("%s", W->parola);
printf("%d\n", W->num);
W=W->next;
}
}