Bueno, hice un progrma usando is<conjunto>, en el cual vos introducis caracteres hasta que se pulse "&".
Cuenta de todo con contadores, todo bien..
El tema es que cuenta espacios tambien y si abris el programa e introducis una frase, por ejemplo:
"Pedro maneja autos"
Deberia contar: 2 ESPACIOS.
-Hasta aca todo bien.
El programa nos pregunta si queremos volver a introducir una frase..
Le ponemos que si..
e introducimos
"Jorge"(sin las comillas obvio..)
Nos deberia dar.. espacio: 0- EL ERROR ES QUE ME DA 1 !!!
- y si en ves de "Jorge" ponemos "Pablo come" nos va a dar ESPACIO: 2,
OSEA SUMA UNO MAS, nose por que revise el codigo mil veces y no encuentro el error espero qe lo encuentren
ACA VA EL CODIGO:
#include <iostream>
#include <cstdio> //LA NESESITO PARA GETCHAR
#include <cctype> //LA NESESITO PARA EL CONJUNTO IS
#include <windows.h> //LA NESESITO PARA SLEEP
using namespace std;
int main(){
char yn;
do{
system("cls");
system("color 0a");
char c;
int consonante=0, vocal=0, digitos=0, signos_de_puntuacion=0, mayusculas=0, minusculas=0,espacios=0;
cout<<endl<<endl<<endl<<endl;
cout<<"Introduzca frase, se leeran caracteres hasta que se pulse ' & '"<<endl<<endl;
while ((c=getchar()) != '&'){ //MIENTRAS C SEA DISTINO DE "&" .. (DONDE C ES LO PRESIONADO EN EL TECLADO
if(isalpha(c)){ //SI LA FUNCION ISALPHA(QUE EVALUA SI ES UNA LETRA) ES DISTINTA DE 0..
if(isupper(c)) mayusculas++; else minusculas++;
switch(tolower(c)){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
vocal++;
break;
default:
consonante++;
}
}
else if(isdigit(c))digitos++;
else if(ispunct(c))signos_de_puntuacion++;
else if(isspace(c))espacios++;
}
system("cls"); //BORRA PANTALLA
system("color 0d"); // COLOR..
cout<<endl<<endl<<endl<<endl<<endl; //ESPEACIOS ENTER..
for(int j=0;j!=40;j++){ //BUCLE PARA, PARA HACER " UNA BARRA DE CARGA "
Sleep(1*1000/40); //1 SON LOS SEGUNDOS QUE QUEREMOS, 1000 LOS MILISEGUNDOS, Y 40
cout<<"= "; //POR QUE ES LA MITAD DE 80 , QUE ES EL ANCHO DE LA CONSOLA QUE SE HABRE
}
cout<<endl<<endl;
cout<<" Consonantes: "<<consonante<<endl;
cout<<" Vocales: "<<vocal<<endl;
cout<<" Digitos: "<<digitos<<endl;
cout<<" Signos de puntuacion: "<<signos_de_puntuacion<<endl;
cout<<" Mayusculas: "<<mayusculas<<endl;
cout<<" Minusculas: "<<minusculas<<endl;
cout<<" Espacios: "<<espacios<<endl;
cout<<endl<<endl;
for(int j=0;j!=40;j++){
Sleep(1*1000/40);
cout<<"= ";
}
cout<<endl<<endl<<endl;
system("pause");
system("cls");
system("color 0f");
cout<<endl<<endl<<endl;
cout<<"Desea introducir otra frase?"<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<"Escriba 'y'o 'Y' seguido de ENTER, o presione otra tecla para salir: ";cin>>yn;
}
while (yn=='y' || yn=='Y'); //MIENTRAS yn SEA 'y' o 'Y' ...(en este caso va a repetir el programa en casi de qe sea 'y' o 'Y'
}
-----
Y otra cosa ya que estamos ^^, A lo ultimo en el while.. como podria poner para que si se presiona la "y" directamente arranque denuevo sin tener que poner enter..
o si se presiona otra tecla directamente salga.
se que es con getchar, pero no lo tengo muy en claro.
Gracias