// Programación en C++ para Ingenieros, Ed. Thomson Paraninfo, 2006 // Capítulo 5: Subprogramas: Acciones y funciones #include <iostream> // Para poder usar las funciones de caracter #include <ctype.h> using namespace std; char saltarSeparadores(char c); bool esPalabra(char c); void pasarPalabra(char &c, int& numLetras); int main(void) { cout << "Entra un texto acabado en '.'" << endl; // Leemos la primera letra char letra; cin.get(letra); // Saltamos los posibles separadores o simbolos de // puntuacion que pueda haber al inicio de // la frase (¿, ¡, espacios...) letra = saltarSeparadores(letra); // Inicializamos los contadores int numLetrasTot = 0, numPalabras = 0; // Bucle principal while (letra != '.') { int numLetras; // Si tenemos una palabra la pasamos toda // mientras contamos sus letras if (esPalabra(letra)) pasarPalabra(letra, numLetras); numPalabras++; numLetrasTot += numLetras; // Pasamos los separadores que pueda haber letra = saltarSeparadores(letra); } // Mostramos los resultados cout << "El total de palabras es: " << numPalabras << endl; if (numPalabras != 0) cout << "La media de letras por palabra es: " << float(numLetrasTot)/numPalabras << endl; else cout << "La media de letras por palabra es: 0" << endl; return 0; } // Salta todos los simbolos de puntuacion y espacios en // blanco hasta que llega a una letra o digito // Devuelve el primer caracter no separador char saltarSeparadores(char c) { while (!isalpha(c) && c != '.') cin.get(c); return c; } // Devuelve cierto si es una letra o digito bool esPalabra(char c) { return (bool(isalnum(c))); } // Pasa toda la palabra y cuenta los caracteres que tiene // Devuelve el primer caracter que no forma parte de ella void pasarPalabra(char &c, int& numLetras) { numLetras = 0; while (isalnum(c)) { cin.get(c); numLetras++; } }