PLE:Unidad7Ejercicio06

/* Programa:        Unidad7Ejercicio06.cpp Fecha:           13/02/2007 Descripción:     Contar la frecuencia de aparición de palabras en un fichero de texto.
 * 1) include
 * 2) include
 * 3) include
 * 4) include
 * 1) include

using namespace std;

struct elemento {       char cad[25]; unsigned int cont; };

void inserta(elemento f[], unsigned int &n, char *c); void muestra(ostream &fs, elemento f[], unsigned int n); void incrementa(elemento f[], unsigned int n); int busca(elemento f[], unsigned int n, char *c); void ordena(elemento f[], unsigned int n); void minuscula(char *c);

const int NUM=80; const int NUMPAL=2000;

void main {       char nomFicTex[NUM], nomFicRes[NUM],pal[25]; elemento frec[NUMPAL]; unsigned int numElem = 0; int p;

ifstream fe; ofstream fs;

cout << "Introduzca el nombre del fichero a leer "; cin >> nomFicTex;

cout << "Introduzca el nombre del fichero con los resultados "; cin >> nomFicRes;

fe.open(nomFicTex); if(!fe.good) {               cout << "ERROR. Problema al acceder al fichero " << nomFicTex; exit(0); }

fs.open(nomFicRes); if(!fs.good) {               cout << "ERROR. Problema al acceder al fichero " << nomFicRes; exit(0); }

fe >> pal; while(!fe.eof) {               // Buscamos el caracter minuscula(pal); p = busca(frec, numElem, pal); if(p == -1) inserta(frec, numElem, pal); else incrementa(frec, p); fe >> pal; }       ordena(frec, numElem); muestra(fs, frec, numElem);

fe.close; fs.close;

cin.ignore; cin.get; }

void inserta(elemento f[], unsigned int &n, char *c) {       strcpy(f[n].cad,c); f[n].cont = 1; n++; }

void muestra(ostream &fs, elemento f[], unsigned int n) { for(unsigned int i = 0; i < n; i++) fs << f[i].cad << '\t' << f[i].cont << endl; fs << "TOTAL palabras = " << n; }

int busca(elemento f[], unsigned int n, char *c) {       int pos = -1; unsigned int i = 0; while(i < n && pos == -1) {               if(strcmp(f[i].cad,c) == 0) pos = i;               i++; }       return pos; }

void incrementa(elemento f[], unsigned int n) { f[n].cont++; }

void minuscula(char *c) {       for(unsigned int i = 0; i < strlen(c); i++) {               if(c[i] == 'Ñ') c[i] = 'ñ'; else c[i] = tolower(c[i]); } }

void ordena(elemento f[], unsigned int n) { unsigned int i, j, k;       elemento aux; for (i = 0; i < n-1; i++) {               k = i;                strcpy(aux.cad, f[i].cad); aux.cont = f[i].cont; for (j = i+1; j <= n-1; j++) {                       if(f[j].cont > aux.cont) {                               k = j;                                strcpy(aux.cad,f[j].cad); aux.cont = f[j].cont; }               }                strcpy(f[k].cad, f[i].cad); f[k].cont = f[i].cont;

strcpy(f[i].cad, aux.cad); f[i].cont = aux.cont; } }