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 criar um Analisador de Frequência de Palavras que processa um texto e exibe as contagens de palavras ordenadas 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 percorrer os dados e lambdas para a 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 a análise de palavras.

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

    • addWord(const std::string& word): incrementa a contagem da 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 (a soma de todas as contagens)
    • getUniqueWords(): retorna o número de palavras únicas (o tamanho do mapa)
    • printByFrequency(): exibe 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 (em ordem decrescente) e depois pela palavra (em ordem crescente) em caso de empate.

  • main.cpp: leia um inteiro n na primeira linha, indicando quantas palavras virão a seguir. Depois, leia n palavras, uma por linha.

    Crie um WordAnalyzer, adicione todas as palavras e, em seguida, exiba:

    1. Imprima Total words: <count>
    2. Imprima Unique words: <count>
    3. Imprima Word frequencies:, seguido da chamada a 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; depois, cherry e date são ordenadas alfabeticamente, pois têm 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: Leia n palavras e adicione-as ao analyzer
    
    // TODO: Imprima "Total words: <count>"
    
    // TODO: Imprima "Unique words: <count>"
    
    // TODO: Print "Word frequencies:" and call printByFrequency()
    
    return 0;
}

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

Pratique por conta própria: Compilador de C++ online