Eu estou tentando fazer um programa em C que leia um arquivo-texto e grave em outro arquivo uma estatística de palavras. Cada palavra lida, deverá ser inserida em uma lista, sem repetição. Cada nó dessa estrutura deve ter um contador de ocorrência. No arquivo de saída a sequência de palavras deverá em ordem decrescente de ocorrências. Fiz um programa base que deveria ler e inserir na lista, porém não esta funcionando. Queria ajuda por favor.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Declaração da estrutura usada no programa.
typedef struct palavras{
char palavra[100];
int quantidade;
struct palavras *prox;
}palavras;
int main(){
//Variaveis
palavras *primeiro=NULL, *aux=NULL, *percorre=NULL;
char string[100], ch[0];
int total=0;
//Abrindo o arquivo
FILE* arquivo = fopen("teste.txt", "r");
if(arquivo == NULL) {
fprintf(stderr, "Erro ao abrir o arquivo.txt.");
return 1;
}
//Lendo a primeira palavra do arquivo
while(1){
strcat(string,ch);
ch[0]= fgetc(arquivo);
if(ch[0]==' '||ch[0]=='\n'||ch[0]=='\t')
break;
}
printf("%s",string);
//Guardando a primeira palavra em um nó de uma lista encadeada.
primeiro= (palavras*)malloc(sizeof(palavras));
strcpy(primeiro->palavra,string);
primeiro->quantidade=0;
primeiro->prox=NULL;
//
while(!feof(arquivo)){
if((ch[0]==' ')||(ch[0]=='\n')||(ch[0]=='\t')){
for(percorre=primeiro; percorre!=NULL; percorre=percorre->prox){
if(strcmp(string,percorre->palavra)==0){
percorre->quantidade++;
strcpy(string,"");
break;
}
if(percorre->prox==NULL && strcmp(string,"")!=0){
aux= primeiro;
primeiro= (palavras*)malloc(sizeof(palavras));
primeiro->quantidade= 1;
strcpy(primeiro->palavra, string);
primeiro->prox= aux;
strcpy(string,"");
}
}
}else{
strcat(string,ch);
}
ch[0]= getc(arquivo);
}
//
for (percorre=primeiro; percorre!=NULL; percorre= percorre->prox){
total= total + percorre->quantidade;
printf("%s - %d\n", percorre->palavra, percorre->quantidade);
}
//
printf("\nO texto cont%cm %d palavras.\n", 130,total);
fclose(arquivo);
}