Revisão: Contador de Frequência de Palavras
Parte da seção Logic & Flow do Journey de C da Coddy — lição 63 de 63.
Desafio
FácilCrie um programa em C que implemente um contador de frequência de palavras para analisar a entrada de texto. Seu programa deve:
- Escrever uma função chamada
countWordOccurrencesque:- Recebe dois parâmetros
char*:sentenceetargetWord - Retorna um inteiro representando o número de vezes que a palavra-alvo aparece na frase
- Usa um loop para processar a frase caractere por caractere
- Identifica os limites das palavras usando espaços como delimitadores
- Extrai cada palavra da frase e a compara com a palavra-alvo usando
strcmp() - Conta correspondências exatas (comparação sensível a maiúsculas e minúsculas)
- Recebe dois parâmetros
- Escrever uma função chamada
extractWordque:- Recebe uma frase
char*, um inteirostartIndexe um parâmetro de palavrachar* - Retorna um inteiro representando o índice após a palavra extraída
- Extrai uma única palavra começando de
startIndexaté que um espaço ou terminador nulo seja encontrado - Armazena a palavra extraída no parâmetro
word - Adiciona um terminador nulo para completar a palavra extraída
- Recebe uma frase
- Escrever uma função chamada
analyzeTextque:- Recebe um parâmetro de frase
char* - Retorna um inteiro representando o número total de palavras na frase
- Conta as palavras identificando espaços como separadores
- Lida corretamente com múltiplos espaços consecutivos (tratando-os como separadores únicos)
- Recebe um parâmetro de frase
- Na função principal:
- Declare um array de caracteres
inputSentencede tamanho 200 - Declare um array de caracteres
searchWordde tamanho 50 - Leia uma frase da entrada (pode conter várias palavras separadas por espaços)
- Leia uma palavra-alvo para pesquisar
- Chame a função
analyzeTexte imprima a contagem total de palavras neste formato exato:Total words: [count] - Chame a função
countWordOccurrencese imprima o resultado neste formato exato:Occurrences of '[searchWord]': [count] - Calcule e imprima a frequência da palavra como uma porcentagem com exatamente 1 casa decimal neste formato exato:
Frequency: [percentage]% - Determine e imprima a categoria de frequência:
- Se a frequência for 0.0%: imprima
Category: Not found - Se a frequência for maior que 0.0%, mas menor que 20.0%: imprima
Category: Rare - Se a frequência estiver entre 20.0% e 50.0% (inclusive): imprima
Category: Common - Se a frequência for maior que 50.0%: imprima
Category: Frequent
- Se a frequência for 0.0%: imprima
- Declare um array de caracteres
Este desafio testa seu domínio de manipulação de strings, tokenização e processamento de texto. Você praticará a divisão de frases em palavras individuais, a comparação de strings para correspondências exatas e a implementação de múltiplas funções que trabalham juntas para analisar dados de texto. O programa demonstra técnicas de processamento de texto do mundo real, essenciais para muitas aplicações em C.
Experimente você mesmo
#include <stdio.h>
#include <string.h>
// TODO: Escreva sua função extractWord aqui
// TODO: Escreva sua função countWordOccurrences aqui
// TODO: Escreva sua função analyzeText aqui
int main() {
char inputSentence[200];
char searchWord[50];
// Ler a frase de entrada
fgets(inputSentence, sizeof(inputSentence), stdin);
// Remover o caractere de nova linha, se presente
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// Ler a palavra de busca
scanf("%s", searchWord);
// TODO: Escreva seu código abaixo
// Chamar a função analyzeText e armazenar a contagem total de palavras
// Chamar a função countWordOccurrences e armazenar as ocorrências
// Calcular a porcentagem de frequência
// Determinar a categoria de frequência
// Exibir os resultados no formato exigido
// printf("Total words: %d\n", totalWords);
// printf("Occurrences of '%s': %d\n", searchWord, occurrences);
// printf("Frequency: %.1f%%\n", frequency);
// printf("Category: %s\n", category);
return 0;
}Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos8Structs e Ponteiros
Ponteiros para StructsO Operador Seta (->)Passagem de Structs por ValorPassagem de Ponteiros para StructsAlocação Dinâmica de StructsRecapitulação: Modificando Struct - Ptr11Desafios de Revisão Final
Revisão: Concatenação Dinâmica de StringsRevisão: Array de StructsRevisão: Contador de Frequência de Palavras3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato