Problema
Se le pide escribir un programa que lea un documento
(archivo) de la entrada estándar y produzcas en la salida estándar
un listado de todas las palabras aparecidas en el documento junto con un
contador del número de ocurrencias de cada palabra. El listado debería
estar en ordenado por número creciente de ocurrencias y orden alfabético
dentro de una misma frecuencia de ocurrencia.
Cada línea del listado de salida debe contener
una única palabra (todas en minúsculas) seguidas por uno
o más espacios en blanco y seguidas por un entero indicando el númerio
de ocurrencias.
Para efectos de esta tarea, una "palabra" es un
string de caracteres alfabéticos limitados en ambos extremos por
caracteres no alfabéticos, el comienzo o fin de línea y el
comienzo o fin de archivo. Las diferencias en mayúscula o minusculas
no son consideradas relevantes. "hola", "HOLA", y "Hola" son todas tratadas
como la misma palabra.
Archivos
Se incluyen los siguientes archivos:
histograma.cpp
Código fuente del programa.
makefile
Archivo de compilación.
documentacion.html
Documentación del programa.
readme.txt
Docuementación en formato de texto.
Diagrama.jpg
Diagrama explicativo.
archivo.txt
Archivo de prueba.
Solución
El programa toma las palabras desde la entrada estandar,
caracter a caracter, transformando la letras mayúsculas a minúsculas.
Palabras son considerados los conjuntos de letras enmarcados entre caracteres
no alfabéticos, la letra ñ o las letras acentuadas.
Las palabras son guardadas en un mapa a medida que se escanea el texto, a cada palabra le es asociada en forma reiterada el numero de ocurrencias que lleva hasta el momento. Las palabras luego son copiadas a una lista para ser ordenadas y listadas en pantalla por el número de ocurrencias.
La solución se muestra en el siguiente diagrama
explicativo:
Compilación
Para compilar simplemente ejecute el comando make
en el directorio donde se encuentra el programa:
$>make
En algunos sistemas en los cuales el directorio actual no este seteado dentro de la variable de ambiente PATH se debe ejecutar así:
$>./make
Para eliminar el archivo creado en la compilación ejecute según corresponda:
$>make clean
$>./make clean
Ejecución
Para ejecutar el programa realice:
$>his
y siga las instrucciones, en algunos sistemas como se dijo anteriormente se debe ejecutar así:
$>./his
También se puede entregar un archivo como argumento, para lo cual se incluye un archivo de ejemplo llamado archivo.txt, Ud. puede proporcinar cualquier archivo de texto el cual para su correcta ejecución debe contener una nueva línea al final de este, es decir, un retorno de carro después de la úlima palabra.
$>his < archivo.txt
$>./his < archivo.txt