// freletras.cpp - Frecuencia con la que aparecen las letras
//                'a' ... 'z' en un texto.
#include <iostream>
#include <iomanip>
#include <vector>
#include <stdexcept>
using namespace std;

void incrementarContador(vector<int>& v, char& c)
{
  // Incrementar el contador correspondiente
  v.at(c - 'a')++;
}

int main( )
{
  const int N_ELEMENTOS = 'z'-'a'+1;  // número de elementos
  vector<int> c(N_ELEMENTOS); // matriz c; sus elementos están a 0
  char car;           // índice

  // Entrada de datos y cálculo de la tabla de frecuencias
  cout << "Introducir texto.\n";
  cout << "Para finalizar introducir la marca eof\n\n";
  while (cin.get(car), !cin.eof())
  {
    try
    {
      incrementarContador(c, car);
    }
    catch(out_of_range)
    {
      cerr << "error de rango producido por el carácter de "
           << "valor ASCII " << static_cast<int>(car) << endl
           << "Introducir texto.\n"
           << "Para finalizar introducir la marca eof\n\n";
    }
  }
  // Escribir la tabla de frecuencias
  for (car = 'a'; car <= 'z'; car++)
    cout << "  " << car;
  cout << "\n  ---------------------------------------"
          "-------------------------------------\n";

  for (car = 'a'; car <= 'z'; car++)
    cout << setw(3) <<  c[car - 'a'];
}

