Contando a quantidade de palavras de um arquivo texto

Publicado por Perfil removido 18/10/2007

[ Hits: 16.690 ]

Download 03.c




Esse programa conta a quantidade de palavras de um arquivo texto, imprimindo via DOS o número de vezes em que cada uma se repete.

Para executá-lo, deve-se digitar o nome do arquivo executável gerado pelo compilador C mais o nome do arquivo texto, como demonstrado abaixo:

nomedoexecutável nomedoarquivo.txt

Obrigado.
Adelman.

  



Esconder código-fonte

/*Programa que conta quantas palavras possui um texto, e imprime quantas vezes cada uma se repete.*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.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 (int argc, char *argv[]){

     FILE *fp;
     palavras *primeiro=NULL, *aux=NULL, *percorre=NULL;
     char string[100], ch[0];
     int total=0;
     
     //Estrutura condicional para prevenir um caso em que o nome do arquivo não seja especificado.
     if (argc!=2){
         printf("Digite o nome do arquivo.\n");
         exit(1);
     }

     //Estrutura condicional para imprimir uma mensagem, caso a abertura do arquivo não seja possível.
     if ((fp=fopen(argv[1],"r+"))==NULL){
         printf("O Arquivo nao pode ser aberto.\n");
         exit(1);
     }
     
     //Algoritmo super trabalhoso para escrever um espaço no final do arquivo para uso posterior.
     while(!feof(fp)){
         getc(fp);             
         if(feof(fp)){
              putc(' ',fp);
              break;
         }  
     }
     
     //Função para trazer o cursor ao início do arquivo.
     rewind(fp);

     //Eliminando a possibilidade de contar espaços, /n 's e /t 's no início do texto
     strcpy(string,"");
     do{
          ch[0] = getc(fp);
          ch[1]='{FONTE}';
     }while(ch[0]==' '||ch[0]=='\n'||ch[0]=='\t');   
     
     //Lendo a primeira palavra do arquivo. 
     while(1){
         strcat(string,ch);
         ch[0]= getc(fp);
         ch[1]='{FONTE}';
         if(ch[0]==' '||ch[0]=='\n'||ch[0]=='\t')
             break;
     }   
     
     //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;
     
     //Algoritmo para guardar palavra em um nó da lista encadeada.
     while(!feof(fp)){
         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(fp);
     }

     //Imprimindo todas as palavras e suas respectivas quantidades em que aparecem no texto.
     for (percorre=primeiro; percorre!=NULL; percorre= percorre->prox){
         total= total + percorre->quantidade;
         printf("%s - %d\n", percorre->palavra, percorre->quantidade);
     }
     
     //Imprimindo o número de palavras contidas no texto.
     printf("\nO texto cont%cm %d palavras.\n", 130,total);
     fclose(fp);    
}

Scripts recomendados

Copia uma linha selecionada para um arquivo secundário

[C] Arquivos e Stat

Arquivo com números aleatórios.

Ler config

Manipulação de registros em arquivos utilizando índices


  

Comentários
[1] Comentário enviado por removido em 19/10/2007 - 13:05h

wc -w nomedoarquivo.txt

;)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts