Menu
Coddy logo textTech

Recapitulação - Frequência de Palavras

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 75 de 104.

challenge icon

Desafio

Fácil

Vamos construir um Analisador de Frequência de Palavras que processa texto e exibe a contagem de palavras ordenada por frequência. Esta é uma tarefa clássica de processamento de texto que reúne todos os componentes da STL que você aprendeu: map para contagem, vector para ordenação, iteradores para travessia e lambdas para lógica de ordenação personalizada.

Você organizará seu código em dois arquivos:

  • WordAnalyzer.h: Defina uma classe WordAnalyzer que gerencia a contagem e análise de palavras.

    Sua classe deve usar um std::map<std::string, int> internamente para armazenar as contagens de palavras. Implemente estes métodos:

    • addWord(const std::string& word) — incrementa a contagem para a palavra fornecida
    • getCount(const std::string& word) — retorna a contagem de uma palavra específica (0 se não for encontrada)
    • getTotalWords() — retorna o número total de palavras adicionadas (soma de todas as contagens)
    • getUniqueWords() — retorna o número de palavras únicas (tamanho do mapa)
    • printByFrequency() — imprime todas as palavras ordenadas por frequência em ordem decrescente. Para palavras com a mesma frequência, ordene-as alfabeticamente. Cada linha deve exibir: word: count

    Para printByFrequency(), você precisará transferir o conteúdo do mapa para um vetor de pares e, em seguida, usar std::sort com uma lambda que compare primeiro pela contagem (decrescente) e depois pela palavra (ascendente) em caso de empate.

  • main.cpp: Leia um número inteiro n na primeira linha indicando quantas palavras virão a seguir. Em seguida, leia n palavras, uma por linha.

    Crie um WordAnalyzer, adicione todas as palavras e exiba:

    1. Imprima Total words: <count>
    2. Imprima Unique words: <count>
    3. Imprima Word frequencies: seguido pela chamada de printByFrequency()

Por exemplo, com a entrada:

7
apple
banana
apple
cherry
banana
apple
date

A saída deve ser:

Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1

Observe como apple aparece primeiro (maior frequência), seguido por banana, e então cherry e date são ordenados alfabeticamente, pois possuem a mesma contagem.

Outro exemplo com a entrada:

5
the
cat
the
sat
the

Saída:

Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1

Experimente você mesmo

#include <iostream>
#include <string>
#include "WordAnalyzer.h"

using namespace std;

int main() {
    int n;
    cin >> n;
    
    WordAnalyzer analyzer;
    
    // TODO: Ler n palavras e adicioná-las ao analyzer
    
    // TODO: Imprimir "Total words: <count>"
    
    // TODO: Imprimir "Unique words: <count>"
    
    // TODO: Imprimir "Word frequencies:" e chamar printByFrequency()
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos