Tengo este codigo creado por mi mismo pero me da un error logico porque al ejecutarlo me dice que la cadena "UASD" solo tiene una vocal y es mentira.
#include <iostream>
#include <string>
class cCadena{
private:
std::string CadCar;
public:
void setCadCar(std::string pCadCar){CadCar=pCadCar;}
std::string getCadCar(){
return CadCar;
}
void ImpHorizontal(){
std::cout<<CadCar<<std::endl;
}
void ImpVertical(){
for(int i=0;i<CadCar.length();i++)
std::cout<<CadCar[i]<<"\n";
}
bool esVocal(){
for(int i=0; CadCar[i]!='\0'; i++){
if (CadCar[i] =='A' || CadCar[i] =='E' || CadCar[i] =='I' || CadCar[i] =='O' || CadCar[i] =='U'
|| CadCar[i] =='a' || CadCar[i] =='e' || CadCar[i] =='i' || CadCar[i] =='o' || CadCar[i] =='u'){
return true;
}
else
return false;
}
}
void ImpCantVocales(){
int CanVoc=0;
if (esVocal())
{
CanVoc++;
}
std::cout<<"\nLa cadena tiene "<< CanVoc <<" vocales"<< std::endl;
}
};
main(){
cCadena oCadena;
oCadena.setCadCar("UASD");
oCadena.ImpHorizontal();
//oCadena.ImpVertical();
oCadena.ImpCantVocales();
// oCadena.ImpCantConsonantes();
system("pause");
}
me imprime que solo existe una vocal ayuda por favor!!!
y alguien es tan amable de explicarme este codigo?
void displayMaxCharacterWords(std::string& cadena )
{
std::string palabra;
string::iterator it = cadena.begin( );
for( string::iterator it2 = it; it2 != cadena.end( ); ++it2 )
{
if ( *it2 == ' ' || *it2 == ',' || *it2 == '.' )
{
size_t length = std::distance( it, it2 );
if ( length > palabra.size( ) )
palabra = std::string(it, it2 );
it = it2+1;
}
}
std::cout << "\n\nLa palabra mas larga de la cadena es: "<< palabra << std::endl;
}
el error logico
if (esVocal())
{
CanVoc++;
}
junto con
if (CadCar[i] =='A' || CadCar[i] =='E' || CadCar[i] =='I' || CadCar[i] =='O' || CadCar[i] =='U'
|| CadCar[i] =='a' || CadCar[i] =='e' || CadCar[i] =='i' || CadCar[i] =='o' || CadCar[i] =='u'){
return true;
si tiene vocal retorna true... listo, fin de la funcion... no se repite porque el return es definitivo, ya salió de la función... en tal caso tienes que llevar un contardor y retornar un int
te recomiendo que uses el debuuger de tu ide para que puedas visualizarlo...
sobre el segundo... los "iterator" son como punteros, pero con funciones divertidas... más info aquí (http://www.cplusplus.com/reference/string/string/)
en la linea 4, crea un iterador y lo apunta al inicio
en el for, crea un iterador y lo apunta al primero, si el iterador no llega al final, lo avanza 1
el if comprueba el caracter apuntado
distance( it, it2 ); mide la distancia entre 2 punteros
string(it, it2 ); retorna el string creado por el contenido entre los 2 punteros
Asi dices
bool esVocal(){
for(int i=0; CadCar[i]!='\0'; i++)
if (CadCar[i] =='A' || CadCar[i] =='E' || CadCar[i] =='I' || CadCar[i] =='O' || CadCar[i] =='U'
|| CadCar[i] =='a' || CadCar[i] =='e' || CadCar[i] =='i' || CadCar[i] =='o' || CadCar[i] =='u')
return true;
}
int ImpCantVocales(){
int CanVoc=0;
if (esVocal()){
CanVoc++;
return CanVoc;}
}
eso fue lo que entendi jejejej
no ...
sería
int esVocal(){
int contador = 0;
for//sin cambios...
if//sin cambios...
contador++;
}
}
return contador;
}
no puedo hacer que la funcion es vocal me devuelva falso o verdadero? debe devolverme un entero?
puedes, pero entonces tendrás que pasarle como parametro una sola letra (como sería logico según su nombre de funcion, ya que to no te digo "hola" es vocal o no :P)
y sería algo como
int esVocal(char letra){
//sin for
//solo if
}
jejejje Gracias pero eso lo tenia hace un rato de esa manera que me lo planteas y me decia que era solo una vocal jajajajajja.
Pense que podia haber una manera de yo pasar el String y recorriega cada letra y me dijese si era una vocal true. jejeje es que necesito hacer esa funcion para hacerme la vida mas facil con las consonantes
el asunto es que si retorna bool como esperas que te digas cuantas fueron? XD...
hazlo como te lo planteo... pero el for va en ImpCantVocales que es ña funcion encargada de contar vocales...
una buena forma de estructurar tu codigo es pensar que es una oficina... no pongas a gente a hacer lo que no le toca... XD
ImpCantVocales cuenta las vocales, pero esVocal decide si es verdadero o falso que lo que recibió es una vocal
esVocal por que se vea bien yo lo haría
bool esVocal(char letra){
string vocales = "aeiouAEIOU";
for(int i=0; i<10 ; i++)
if(letra==vocales[i])
return true;
return false;
}
Gracias amigo. ;-) ;-)