Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Vamos 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 clase WordAnalyzer que 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 dada
    • getCount(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 usar std::sort con una lambda que compare primero por conteo (descendente), y luego por palabra (ascendente) en caso de empate.

  • main.cpp: Lee un entero n en la primera línea indicando cuántas palabras seguirán. Luego lee n palabras, una por línea.

    Crea un WordAnalyzer, añade todas las palabras y luego muestra:

    1. Imprime Total words: <count>
    2. Imprime Unique words: <count>
    3. Imprime Word frequencies: seguido de la llamada a printByFrequency()

Por ejemplo, con la entrada:

7
apple
banana
apple
cherry
banana
apple
date

La salida debería ser:

Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1

Observa 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
the

Salida:

Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1

Prué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