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ácilVamos a construir un Analizador de Frecuencia de Palabras que procese texto y muestre el conteo de palabras ordenado 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 el recorrido y lambdas para la lógica de ordenamiento personalizada.
Organizarás tu código en dos archivos:
WordAnalyzer.h: Define una claseWordAnalyzerque gestione el conteo y análisis de palabras.Tu clase debe usar un
std::map<std::string, int>internamente para almacenar los conteos de palabras. Implementa estos métodos:addWord(const std::string& word)— incrementa el conteo para la palabra dadagetCount(const std::string& word)— devuelve el conteo para una palabra específica (0 si no se encuentra)getTotalWords()— devuelve el número total de palabras añadidas (suma de todos los conteos)getUniqueWords()— devuelve el número de palabras únicas (tamaño del mapa)printByFrequency()— imprime todas las palabras ordenadas por frecuencia en orden descendente. Para palabras con la misma frecuencia, ordénalas alfabéticamente. Cada línea debe mostrar:word: count
Para
printByFrequency(), necesitarás transferir el contenido del mapa a un vector de pares, luego usarstd::sortcon una lambda que compare primero por conteo (descendente), y luego por palabra (ascendente) en caso de empate.main.cpp: Lee un enteronen la primera línea indicando cuántas palabras seguirán. Luego leenpalabras, una por línea.Crea un
WordAnalyzer, añade todas las palabras y luego muestra:- Imprime
Total words: <count> - Imprime
Unique words: <count> - Imprime
Word frequencies:seguido de la 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 (frecuencia más alta), seguido de banana, luego cherry y date se ordenan alfabéticamente ya que tienen el mismo conteo.
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: Leer n palabras y añadirlas al analyzer
// TODO: Imprimir "Total words: <count>"
// TODO: Imprimir "Unique words: <count>"
// TODO: Imprimir "Word frequencies:" y llamar a 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érico