Ad ogni ciclo potresti vedere se la parola corrente esiste nel vettore delle strutture. Se non esiste potresti inserirla e mettere la sua occorrenza ad 1, se esiste aumenti la sua occorrenza. Nello stesso momento puoi incrementare il contatore delle parole ad ogni iterazione. Quindi eseguendo un unico ciclo puoi fare le due cose. Come struttura potresti utilizzare una del tipo:
struct cella
{
char parola[100];
int occorrenze;
};
Come vettore di strutture potresti utilizzare uno del tipo:
struct cella vettoreParole[1000]; // si suppone che non ci siano più di 1000 parole distinte.
Per il confronto potresti fare una funzione dove con
strcmp vedi se la parola attuale restituita da strtok compare nel vettore delle celle. se non esiste copi la parola attuale nella prima cella libera del vettore con
strcpy. La prima cella libera lo trovi tenendo aggiornato un indice che inizialmente parte da zero e ogni volta che metti una parola nuova viene incrementato.