Lee carácter por carácter hasta encontrar un carácter de fin de palabra y añades esa palabra al array y vuelves a hacer lo mismo desde la siguiente posición y buscas la nueva palabra en el array con strcmp y si hay coincidencia incrementar su contador y si no la hay añades la nueva palabra al final del array. Lo ideal seria usar memoria dinámica. También puedes contabilizar el número de comas, puntos, espacios, o lo que sea.
Tienes que controlar que el primer carácter no sea un carácter de fin de palabra y si es así avanzas un carácter.
EDITO:
Aqui te pongo un codigo de cuando yo empecé donde hice algo muy similar pero yo tambien almacenaba los numeros y simbolos:
Código C:
Ver original//---------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZESTRING 25
typedef struct{
char palabra[SIZESTRING];
int contador;
}Lista;
Lista *AddToList(Lista *pLista, int *pos, int largoPalabra, char *palabra);
int main(int argc, char* argv[])
{
FILE *archivo;
char palabra[SIZESTRING], caracter;
int largoPalabra=0, largoNumero=0, posListaPalabras=0, posListaNumeros=0, posListaSimbolos=0, i, encontrada;
//Creamos 3 listas: una para palabras, otra para numeros y otra para simbolos
Lista *pListaPalabras=NULL, *pListaNumeros=NULL, *pListaSimbolos=NULL;
//Abrimos el archivo a analizar
archivo
= fopen("texto.txt","r");
if(archivo != NULL){
printf("Archivo abierto satisfactoriamente.\n");
do{ //Leemos el archivo caracter a caracter hasta el final
caracter
= fgetc(archivo
); if((caracter >= 'A' && caracter <= 'Z') || (caracter >= 'a' && caracter <= 'z')){
//Si es alfabetico será una palabra asi que si ya teniamos un numero lo almacenamos en la lista de numeros
//Indicamos que ya no hay numero colocando su largo a 0
if(largoNumero > 0){
pListaNumeros = AddToList(pListaNumeros,&posListaNumeros,largoNumero,palabra);
largoNumero=0;
}
//Y guardamos el caracter de la palabra incrementando el largo para saber que contiene una palabra
palabra[largoPalabra] = caracter;
largoPalabra++;
}else if(caracter >='0' && caracter <= '9'){
//Si por el contrario es numerico será un numero asi que si ya teniamos una palabra la almacenamos en la lista de palabras
//Indicamos que ya no hay palabra colocando su largo a 0
if(largoPalabra > 0){
pListaPalabras = AddToList(pListaPalabras,&posListaPalabras,largoPalabra,palabra);
largoPalabra=0;
}
//Y guardamos el caracter del numero incrementando el largo para saber que contiene un numero
palabra[largoNumero] = caracter;
largoNumero++;
}else{
//Y si no es ninguno de los anteriores, es un simbolo
//Comprobamos si habia una palabra en el array y si es asi la almacenamos en la lista de palabras
if(largoPalabra > 0){
pListaPalabras = AddToList(pListaPalabras,&posListaPalabras,largoPalabra,palabra);
//Y guardamos el simbolo en la lista de simbolos
palabra[0]=caracter;
palabra[1]='\0';
pListaSimbolos = AddToList(pListaSimbolos,&posListaSimbolos,1,palabra);
}
//Comprobamos si habia un numero en el array y si es asi lo almacenamos en la lista de numeros
}else if(largoNumero > 0){
pListaNumeros = AddToList(pListaNumeros,&posListaNumeros,largoNumero,palabra);
//Y guardamos el simbolo en la lista de simbolos
palabra[0]=caracter;
palabra[1]='\0';
pListaSimbolos = AddToList(pListaSimbolos,&posListaSimbolos,1,palabra);
}
}else{
//Si no habia ni palabra ni numero en el array llegamos aqui y guardamos el simbolo en la lista de simbolos
palabra[0]= caracter;
palabra[1]= '\0';
pListaSimbolos = AddToList(pListaSimbolos,&posListaSimbolos,1,palabra);
}
}
largoPalabra=0;
largoNumero=0;
}
if(posListaPalabras > 0){
printf("\nLista de palabras encontradas\n"); printf("-----------------------------\n"); for(i=0;i<posListaPalabras;i++){
printf("%s: %d veces\n",pListaPalabras
[i
].
palabra,pListaPalabras
[i
].
contador); }
if(pListaPalabras != NULL)
}else{
printf("No se encontraron palabras en el archivo."); }
if(posListaNumeros > 0){
printf("\nLista de numeros encontrados\n"); printf("-------------------------------\n"); for(i=0;i<posListaNumeros;i++){
printf("%s: %d veces\n",pListaNumeros
[i
].
palabra,pListaNumeros
[i
].
contador); }
if(pListaNumeros != NULL)
}else{
printf("No se encontraron numeros en el archivo."); }
if(posListaSimbolos > 0){
printf("\nLista de simbolos encontrados\n"); printf("-------------------------------\n"); for(i=0;i<posListaSimbolos;i++){
printf("%s: %d veces\n",pListaSimbolos
[i
].
palabra,pListaSimbolos
[i
].
contador); }
if(pListaSimbolos != NULL)
}else{
printf("No se encontraron simbolos en el archivo."); }
}else{
printf("No se pudo abrir el archivo."); }
printf("\n\nPulse INTRO para salir."); return 0;
}
//---------------------------------------------------------------------------
//Funcion encargada de almacenar la estructura en la lista
Lista *AddToList(Lista *pLista, int *pos, int largoPalabra, char *palabra)
{
int encontrada=0, i;
for(i=0;i<*pos;i++){
if(strcmp(pLista
[i
].
palabra, palabra
)==0){ pLista[i].contador++;
encontrada=1;
break;
}
}
if(encontrada == 0){
if(pLista == NULL){
pLista
= malloc(sizeof(Lista
)); }else{
pLista
= realloc(pLista
,sizeof(Lista
)*(*pos
+1)); }
memset(pLista
[*pos
].
palabra,0,SIZESTRING
); strncpy(pLista
[*pos
].
palabra,palabra
,largoPalabra
); pLista[*pos].contador++;
*pos+=1;
}
return pLista;
}