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.
Desafio
FácilVamos 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 classeWordAnalyzerque 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 fornecidagetCount(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, usarstd::sortcom uma lambda que compare primeiro pela contagem (decrescente) e depois pela palavra (ascendente) em caso de empate.main.cpp: Leia um número inteironna primeira linha indicando quantas palavras virão a seguir. Em seguida, leianpalavras, uma por linha.Crie um
WordAnalyzer, adicione todas as palavras e exiba:- Imprima
Total words: <count> - Imprima
Unique words: <count> - Imprima
Word frequencies:seguido pela chamada deprintByFrequency()
- Imprima
Por exemplo, com a entrada:
7
apple
banana
apple
cherry
banana
apple
dateA saída deve ser:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Observe 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
theSaída:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Experimente 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
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários10Visão Geral da STL
Visão Geral e Filosofia da STLContainers da STLIteradoresAlgoritmos da STLFunctors e Expressões LambdaRecapitulação - Frequência de Palavras2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico