C++ Academy · Lección

Un contador de frecuencia de palabras

Cuente las apariciones de cada palabra en un archivo de texto mediante std::map.

Lección 4 de 414 pasos

Un contador de frecuencia de palabras es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Objetivo del proyecto

Lea un archivo de texto e imprima cada palabra única junto con su número de apariciones. Es un problema clásico que se resuelve limpiamente con std::map o std::unordered_map.

Cabeceras necesarias

E/S de archivos, cadenas y un contenedor asociativo.

#include <fstream>
#include <map>
#include <string>
#include <iostream>

Leer las palabras una a una

El operador de extracción >> lee tokens separados por espacios en blanco, lo que resulta perfecto para palabras sin procesar.

std::ifstream file("book.txt");
std::map<std::string, int> counts;
std::string word;
while (file >> word) {
    counts[word]++;
}

Normalizar las palabras

Convierta cada palabra a minúsculas para que «Hello» y «hello» se cuenten como la misma palabra.

#include <algorithm>
std::transform(word.begin(), word.end(), word.begin(),
    [](unsigned char c) { return std::tolower(c); });

Eliminar la puntuación

Elimine la puntuación del principio y del final de cada palabra.

while (!word.empty() && !std::isalpha(word.front())) word.erase(0,1);
while (!word.empty() && !std::isalpha(word.back())) word.pop_back();

Imprimir los recuentos

Recorra el mapa e imprima cada par. std::map recorre las claves en orden ascendente.

for (const auto& [w, n] : counts) {
    std::cout << w << ": " << n << "\n";
}

Ordenar por frecuencia

Para imprimir por frecuencia en lugar de alfabéticamente, copie las entradas en un vector y ordénelo.

std::vector<std::pair<std::string, int>> entries(counts.begin(), counts.end());
std::sort(entries.begin(), entries.end(),
    [](auto& a, auto& b) { return a.second > b.second; });

Las N más frecuentes

Imprima solo las 10 primeras entradas, o cualquier cantidad N, del vector ordenado.

for (size_t i = 0; i < 10 && i < entries.size(); ++i) {
    std::cout << entries[i].first << ": " << entries[i].second << "\n";
}

map frente a unordered_map

Para archivos grandes, std::unordered_map es más rápido en promedio (búsqueda O(1)), pero recorre los elementos en un orden arbitrario. Use std::map para obtener una salida ordenada.

Palabras vacías

Filtre las palabras cortas y comunes, como «the», «and» y «of», usando un conjunto de palabras vacías.

static const std::set<std::string> stop = {"the","and","of","to","a"};
if (stop.count(word)) continue;

Contar líneas o caracteres

Son variantes del mismo patrón: cuente el total de líneas con std::getline y el total de caracteres con std::ifstream + std::istreambuf_iterator.

Consideraciones de rendimiento

Para archivos enormes, use unordered_map con claves string_view, use mmap para mapear el archivo y evite asignaciones en el montón por cada palabra.

Comprobación rápida

¿Qué contenedor recorre automáticamente los elementos en orden alfabético?

Resumen

Un contador de frecuencia de palabras reúne streams, cadenas, contenedores asociativos y algoritmos. Elija map para obtener una salida ordenada o unordered_map para mayor velocidad. Normalice, elimine la puntuación y considere las palabras vacías para obtener resultados más limpios.

Gratis para empezar

Aprende C++ con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Un contador de frecuencia de palabras» es gratis?

Sí — el texto completo de «Un contador de frecuencia de palabras» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Un contador de frecuencia de palabras»?

Cuente las apariciones de cada palabra en un archivo de texto mediante std::map. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Un contador de frecuencia de palabras»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Construcción de una calculadora CLI sencilla
  2. Lectura y escritura de archivos CSV
  3. Un juego de adivinar números
  4. Un contador de frecuencia de palabras
← Volver a C++ Academy