Abra um arquivo texto, calcule e escreva o número de caracteres, o número de linhas e o número de palavras neste arquivo. Escreva também quantas vezes cada letra ocorre no arquivo (ignorando letras com acento). Obs.: palavras são separadas por um ou mais caracteres espaço, tabulação ou nova linha.
Passo 1
O enunciado pede para escrever um programa que abra um arquivo texto e calcule: número total de caracteres, número de linhas, número de palavras (onde palavras são separadas por espaços, tabulações ou quebras de linha) e a frequência de cada letra do alfabeto (ignorando letras acentuadas). O conteúdo envolve manipulação de arquivos em C (ou outra linguagem), leitura de caracteres, detecção de limites de palavras e contagem de frequências.
Passo 2
Para contar caracteres e linhas vamos percorrer o arquivo caractere a caractere. Sempre que lermos um caractere (incluindo espaços, tabulações e quebras de linha) incrementamos o contador de caracteres; quando o caractere for ‘\n’ incrementamos também o contador de linhas.
Passo 3
Para contar palavras podemos usar um estado (dentroParteDeUmaPalavra) que indica se já estamos lendo uma palavra. Sempre que encontramos um caractere não-branco (não espaço, não tabulação, não \n) e o estado está em falso, isso indica o início de uma nova palavra: incrementamos o contador de palavras e mudamos o estado para verdadeiro. Quando encontramos um caractere branco, mudamos o estado para falso.
Passo 4
Para contar letras, ao ler cada caractere, primeiro normalizamos: convertemos para minúsculo e descartamos acentos (ou simplesmente testamos se está entre ‘a’ e ‘z’). Se o caractere resultante for uma letra do alfabeto inglês, incrementamos o contador correspondente no vetor de tamanho 26.
Passo 5
No fim da leitura do arquivo, temos: total de caracteres, linhas, palavras e um vetor de 26 posições com as contagens de ‘a’ até ‘z’. Só falta exibir esses resultados na saída padrão.
Não esqueça de fechar o arquivo antes de terminar o programa.
Não esqueça de fechar o arquivo antes de terminar o programa.
Passo 6
Abaixo está um exemplo de implementação em C que segue essa lógica.
Resposta
#include <stdio.h>
#include <ctype.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf(“Uso: %s nome_do_arquivo\n”, argv[0]);
return 1;
}
if (argc != 2) {
printf(“Uso: %s nome_do_arquivo\n”, argv[0]);
return 1;
}
FILE *fp = fopen(argv[1], "r");
if (!fp) {
perror("Erro ao abrir o arquivo");
return 1;
}
long totalChars = 0;
long totalLines = 0;
long totalWords = 0;
int freq[26] = {0};
int dentroPalavra = 0;
int c;
while ((c = fgetc(fp)) != EOF) {
totalChars++;
if (c == '\n') {
totalLines++;
}
// Contagem de palavras
if (c == ' ' || c == '\t' || c == '\n') {
dentroPalavra = 0;
} else if (!dentroPalavra) {
dentroPalavra = 1;
totalWords++;
}
// Contagem de letras (ignorando acentos)
if (isalpha(c)) {
char lower = tolower(c);
if (lower >= 'a' && lower <= 'z') {
freq[lower - 'a']++;
}
}
}
fclose(fp);
printf("Total de caracteres: %ld\n", totalChars);
printf("Total de linhas: %ld\n", totalLines);
printf("Total de palavras: %ld\n", totalWords);
printf("Frequência de letras (a-z):\n");
for (int i = 0; i < 26; i++) {
printf("%c: %d\n", 'a' + i, freq[i]);
}
return 0;
}