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.

Passo 6

Abaixo está um exemplo de implementação em C que segue essa lógica.

Resposta

#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
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;
}

Exercícios relacionados