Está en la página 1de 2

/* Programa que lee un texto terminado en un punto y muestra por pantalla el

numero de separadores, el numero de palabras, el numero de lineas,


la frecuencia de palabras de cada longitud y cual es la palabra de mayor
longitud*/

#include <iostream>
#include <array>
#define MAX 35 //tamaño máximo de palabra
using namespace std;

typedef array<unsigned,MAX> Tfrecuencias;

bool es_letra(char c);


bool es_digito(char c);
void procesar_texto(Tfrecuencias &frecuencias, unsigned &npal, unsigned &nlin,
string &palabra_mayor);
void mostrar_estadisticas(Tfrecuencias frecuencias, unsigned npal, unsigned nlin,
string palabra_mayor);

int main()
{
unsigned npal=0, nlin=1;
string palabra_mayor;
Tfrecuencias frecuencias= {{0}};

procesar_texto(frecuencias, npal,nlin,palabra_mayor);
mostrar_estadisticas(frecuencias, npal,nlin,palabra_mayor);

return 0;
}

bool es_letra(char c)
{
return (c>='A' && c<='Z') || (c>='a' && c<='z');
}

bool es_digito(char c)
{
return (c>='0' && c<='9');
}
void procesar_texto(Tfrecuencias &frecuencias, unsigned &npal, unsigned &nlin,
string &palabra_mayor)
{
unsigned cont_letras=0, mayor=0;
char letra;
string palabra;
palabra.clear(); //inicialmente la variable no contiene ninguna palabra
cout << "\nIntroduce un texto terminado en punto: ";
cin >> noskipws; //para que no salte los separadores
cin >> letra;
while(letra!='.')
{
if (es_letra(letra)||es_digito(letra))
{
cont_letras++; //vamos contando letras
palabra+=letra; //vamos formando la palabra
}
else //es un separador
{
frecuencias[0]++; //se contabilizan los separadores en la
//posicion cero del array frecuencias
if (cont_letras !=0) //si hay una palabra
{
npal++;
frecuencias[cont_letras]++;//se actualizan las frecuencias
if(cont_letras>mayor) //si la palabra actual es de
{ //mas longitud que la que se tiene como mayor
mayor=cont_letras; //se cambia el mayor
palabra_mayor=palabra; //y la palabra
}
cont_letras = 0;
palabra.clear(); //se limpia la palabra para poder
} //formar una nueva
if(letra=='\n')
nlin++; //se contabilizan las lineas
}
cin >> letra;
}

if (cont_letras !=0) // si justo antes del punto se terminaba


{ // en una palabra
npal++;
frecuencias[cont_letras]++;
if(cont_letras>mayor)
{
mayor=cont_letras;
palabra_mayor=palabra;
}
}
}

void mostrar_estadisticas(Tfrecuencias frecuencias, unsigned npal, unsigned nlin,


string palabra_mayor)
{
unsigned i;
cout << endl << "Numero de separadores: " << frecuencias[0];
cout << endl << "Numero de lineas: " << nlin;
cout << endl << "Numero de palabras: " << npal;
cout << endl << "Palabra mayor: " << palabra_mayor;
cout << endl << "Frecuencia de palabras: ";

for(i=1; i<MAX; i++)


if(frecuencias[i]!=0)
cout << endl << " De longitud "<< i <<": " <<frecuencias[i];
cout << endl;
}

También podría gustarte