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 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 classeWordAnalyzerque 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 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 (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, usarstd::sortcom 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 inteironna primeira linha, indicando quantas palavras virão a seguir. Depois, leianpalavras, uma por linha.Crie um
WordAnalyzer, adicione todas as palavras e, em seguida, exiba:- Imprima
Total words: <count> - Imprima
Unique words: <count> - Imprima
Word frequencies:, seguido da chamada aprintByFrequency()
- 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; depois, cherry e date são ordenadas alfabeticamente, pois têm 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: 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
1Fundamentos de POO
Arquivos externosBuild e compilação em C++Arquivos de cabeçalho e arquivos-fonteNamespaces e escopoIntrodução à POO em C++Classes vs. objetosO ponteiro 'this'Métodos (funções membro)Atributos (membros de dados)Noções básicas de construtores e destruidoresRevisão - calculadora simples4Propriedades de Classe
Membros de Instância vs. EstáticosGetters e SettersFunções Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRevisão - Gerenciador de Contas Bancárias7Herança
Herança básicaNíveis de acesso da herançaOrdem de chamada de construtor e destrutorSobrescrita de métodosFunções virtuais e VTableHerança múltiplaHerança virtualRevisão - Hierarquia de funcionários10Visão geral da STL
Visão geral e filosofia da STLContêineres da STLIteradoresAlgoritmos da STLFunctors e expressões lambdaRecapitulação - Frequência de palavras13Padrões de Projeto — Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonFactory e Abstract FactoryPadrão BuilderPadrão ObserverPadrão Strategy2Gerenciamento de Memória
Memória Stack vs. HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Ponteiros Inteligentes em C++RAII em C++Revisão - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de acesso em C++Especificadores de acesso em profundidadeOcultação de informaçõesStruct vs ClasseClasses aninhadas e internasRecapitulação - Sistema de registros de alunos8Polimorfismo
Polimorfismo em compilação vs. execuçãoSobrecarga de funçõesFunções virtuais revisadasFunções virtuais purasClasses abstratasDesign de interfaces em C++Conversão dinâmica e RTTIRecapitulação — Calculadora de formas11Conceitos Avançados de OOP
Composição vs. HerançaMixins via CRTPIdioma PimplApagamento de TiposClasses Enum e Tipagem ForteTratamento de Exceções em OOPHierarquias de Exceções Personalizadas14Padrões de Projeto — Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositeRAII como Padrão3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentoListas de Inicialização do ConstrutorConstrutores DelegantesAprofundamento em DestrutoresRegra dos Três / Cinco / ZeroRevisão - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de FluxoSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçõesTemplates de ClassesEspecialização de TemplatesTemplates VariádicosNoções Básicas de SFINAE e Traits de TiposRecapitulação - Contêiner GenéricoPratique por conta própria: Compilador de C++ online