Resumen - Frecuencia de palabras
Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy. Lección 75 de 104.
Desafío
FácilConstruyamos un analizador de frecuencia de palabras que procese texto y muestre los recuentos de palabras ordenados por frecuencia. Esta es una tarea clásica de procesamiento de texto que reúne todos los componentes de la STL que has aprendido: map para contar, vector para ordenar, iteradores para recorrer y lambdas para la lógica de ordenación personalizada.
Organizarás tu código en dos archivos:
WordAnalyzer.h: Define una claseWordAnalyzerque gestione el recuento y el análisis de palabras.Tu clase debe usar internamente un
std::map<std::string, int>para almacenar los recuentos de palabras. Implementa estos métodos:addWord(const std::string& word): incrementa el recuento de la palabra indicadagetCount(const std::string& word): devuelve el recuento de una palabra específica (0 si no se encuentra)getTotalWords(): devuelve el número total de palabras añadidas (la suma de todos los recuentos)getUniqueWords(): devuelve el número de palabras únicas (el tamaño del mapa)printByFrequency(): imprime todas las palabras ordenadas por frecuencia en orden descendente. Para las palabras con la misma frecuencia, ordénalas alfabéticamente. Cada línea debe mostrar:word: count
Para
printByFrequency(), tendrás que transferir el contenido del mapa a un vector de pares y, después, usarstd::sortcon una lambda que compare primero por recuento (en orden descendente) y, en caso de empate, por palabra (en orden ascendente).main.cpp: Lee un enteronen la primera línea que indique cuántas palabras aparecerán a continuación. Después, leenpalabras, una por línea.Crea un
WordAnalyzer, añade todas las palabras y, después, muestra:- Imprime
Total words: <count> - Imprime
Unique words: <count> - Imprime
Word frequencies:seguido de una llamada aprintByFrequency()
- Imprime
Por ejemplo, con la entrada:
7
apple
banana
apple
cherry
banana
apple
dateLa salida debería ser:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1Observa cómo apple aparece primero (la frecuencia más alta), seguida de banana; después, cherry y date se ordenan alfabéticamente porque tienen el mismo recuento.
Otro ejemplo con la entrada:
5
the
cat
the
sat
theSalida:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1Pruébalo tú mismo
#include <iostream>
#include <string>
#include "WordAnalyzer.h"
using namespace std;
int main() {
int n;
cin >> n;
WordAnalyzer analyzer;
// TODO: Lee n palabras y añádelas al analyzer
// TODO: Imprime "Total words: <count>"
// TODO: Imprime "Unique words: <count>"
// TODO: Print "Word frequencies:" and call printByFrequency()
return 0;
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosConstrucción y compilación en C++Archivos de cabecera y archivos fuenteNamespaces y alcanceIntroducción a OOP en C++Clases vs ObjetosEl puntero 'this'Métodos (Funciones miembro)Atributos (Miembros de datos)Conceptos básicos de Ctors y DtorsResumen - Calculadora simple4Propiedades de clase
Miembros de instancia vs. estáticosGetters y SettersFunciones miembro constPalabra clave mutableMétodos y variables estáticosFunciones y clases amigasResumen - Gestor de cuentas bancarias7Herencia
Herencia básicaNiveles de acceso en la herenciaOrden de llamada de Ctor y DtorSobrescritura de métodosFunciones virtuales y VTableHerencia múltipleHerencia virtualResumen - Jerarquía de empleados10Visión general de la STL
Visión general y filosofía de la STLContenedores de la STLIteradoresAlgoritmos de la STLFuntores y expresiones lambdaResumen - Frecuencia de palabras2Gestión de memoria
Memoria Stack vs HeapPunteros y referenciasMemoria dinámica (new/delete)Punteros inteligentes en C++RAII en C++Resumen - Gestor de arrays dinámicos5Encapsulamiento
Especificadores de acceso en C++Especificadores de acceso en profundidadOcultamiento de informaciónStruct vs ClassClases anidadas e internasResumen - Sistema de registros de estudiantes8Polimorfismo
Polimorfismo: Compilación vs. Tiempo de ejecuciónSobrecarga de funcionesFunciones virtuales revisadasFunciones virtuales purasClases abstractasDiseño de interfaces en C++Dynamic Casting y RTTIResumen: Calculadora de figuras11Conceptos avanzados de POO
Composición vs. HerenciaMixins mediante CRTPIdioma PimplBorrado de tiposEnum Classes y tipado fuerteManejo de excepciones en POOJerarquías de excepciones personalizadas14Patrones de diseño - Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositeRAII como patrón3Constructores y Destructores
Constructor por defectoConstructor parametrizadoConstructor de copiaConstructor de movimientoListas de inicialización del constructorConstructores delegadosAnálisis profundo del destructorRegla de tres / cinco / ceroResumen - Clase String6Sobrecarga de operadores
Introducción a la sobrecarga de operadoresSobrecarga de operadores aritméticosSobrecarga de operadores de comparaciónOperadores de flujo (Stream)Sobrecarga del operador de asignaciónSobrecarga de los operadores [] y ()Operadores de conversión de tiposResumen - Clase Matrix9Plantillas
Plantillas de funcionesPlantillas de clasesEspecialización de plantillasPlantillas variádicasConceptos básicos de SFINAE y Type TraitsResumen - Contenedor genéricoPractica por tu cuenta: Compilador de C++ online