Contar la frecuencia de las letras de una cadena en C y C++
En esta lección vas a contar cuántas veces aparece cada letra minúscula en una cadena usando un arreglo de 26 elementos.
Introducción
Una tabla de frecuencias asocia un contador a cada carácter. Como solo hay 26 letras minúsculas de la a a la z, se puede usar un arreglo de 26 elementos: el elemento 0 cuenta las a, el elemento 1 las b, y así sucesivamente.
Puntos importantes
- Activa los avisos del compilador (compiler warnings) y corrígelos todos.
- Entiende bien el tipo y la vida útil (lifetime) de cada valor.
- Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.
Ejemplos de código C y C++
#include <stdio.h>
int main(void) {
const char *text = "banana"; int counts[26] = {0};
// Convert each lowercase letter to an array index.
for (; *text; ++text) ++counts[*text - 'a'];
for (int i = 0; i < 26; ++i) if (counts[i]) printf("%c=%d\n", 'a' + i, counts[i]);
}
a=3
b=1
n=2
#include <array>
#include <iostream>
#include <string>
int main() {
std::string text = "banana"; std::array<int, 26> counts{};
// Convert each lowercase letter to an array index.
for (char character : text) ++counts[character - 'a'];
for (size_t i = 0; i < counts.size(); ++i) if (counts[i]) std::cout << char('a' + i) << '=' << counts[i] << '\n';
}
a=3
b=1
n=2
Comparación entre C y C++
La expresión *text - 'a' convierte una letra en un índice de 0 a 25, porque las letras tienen códigos consecutivos. El programa aumenta el contador de ese índice y después un segundo bucle solo muestra las letras cuyo contador no es cero. Para "banana", el resultado es a=3, b=1 y n=2.
C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.
C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.
Ejercicios de práctica
Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.
- Prueba entradas no válidas y valores límite.
- Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
- Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
Todos los retos