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

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

  • main.cpp: Lee un entero n en la primera línea que indique cuántas palabras aparecerán a continuación. Después, lee n palabras, una por línea.

    Crea un WordAnalyzer, añade todas las palabras y, después, muestra:

    1. Imprime Total words: <count>
    2. Imprime Unique words: <count>
    3. Imprime Word frequencies: seguido de una 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 (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
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: 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

Practica por tu cuenta: Compilador de C++ online