Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie um programa em C que implemente um contador de frequência de palavras para analisar a entrada de texto. Seu programa deve:

  1. Escrever uma função chamada countWordOccurrences que:
    • Recebe dois parâmetros char*: sentence e targetWord
    • 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)
  2. Escrever uma função chamada extractWord que:
    • Recebe uma frase char*, um inteiro startIndex e um parâmetro de palavra char*
    • Retorna um inteiro representando o índice após a palavra extraída
    • Extrai uma única palavra começando de startIndex até 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
  3. Escrever uma função chamada analyzeText que:
    • 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)
  4. Na função principal:
    • Declare um array de caracteres inputSentence de tamanho 200
    • Declare um array de caracteres searchWord de 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 analyzeText e imprima a contagem total de palavras neste formato exato: Total words: [count]
    • Chame a função countWordOccurrences e 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

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