Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/11/2014, 05:33
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Implementar función c++

Otra opción puede ser comparar cada caracter de la cadena con su versión en minúscula.

Si todos los caracteres son minúsculos, entonces todavía has de comprobar si estás en el rango del tamaño.
Algo así:
Código C++:
Ver original
  1. bool valida(string s, int n);
  2. int main()
  3. {
  4.     string cadena="aeddddddiou";
  5.     if (valida(cadena,0))
  6.     {
  7.         cout<<"La cadena ES valida"<<endl;
  8.     }
  9.     else
  10.     {
  11.         cout<<"La cadena NO es valida"<<endl;
  12.     }
  13.     return 0;
  14. }
  15.  
  16. bool valida(string s, int n)
  17. {
  18.     for (int i=0; i<s.size(); i++)
  19.     {
  20.         cout<<"Original: "<<s[i]<<" - Copia: "<<(char)tolower(s[i])<<endl;
  21.         if (s[i]!=(char)tolower(s[i]))
  22.         {
  23.             return false;
  24.         }
  25.     }
  26.     return (s.size()>=3 && s.size()<=8);
  27. }

Te he puesto un cout en el que se va mostrando cada caracter de la cadena s y el mismo en minúscula. También puedes ver cómo se sale de la función en el momento en el que se encuentra una mayúscula.
Si cumple la primera condición, queda evaluar el tamaño.
Como verás, la función retorna el resultado de la evaluación.
Eso es equivalente a:
Código C++:
Ver original
  1. if (s.size()>=3 && s.size()<=8)
  2. {
  3.     return true;
  4. }
  5. else
  6. {
  7.     return false;
  8. }

Por otro lado, tal como tienes la firma de la función:
bool valida(string s, int n)

Parece que lo que quieres es que la cadena use "n" para alguna comparación de tamaño, pero tal como dices en el enunciado los límites de tamaño son un intervalo.
Si lo que quieres es que los límites de la cadena sean parametrizables, entonces deberías incluir otro parámetro en la firma de la funcion:
Código C++:
Ver original
  1. bool valida(string s, int min, int max)
  2. {
  3.     for (int i=0; i<s.size(); i++)
  4.     {
  5.         cout<<"Original: "<<s[i]<<" - Copia: "<<(char)tolower(s[i])<<endl;
  6.         if (s[i]!=(char)tolower(s[i]))
  7.         {
  8.             return false;
  9.         }
  10.     }
  11.     return (s.size()>=min && s.size()<=max);
  12. }

O sencillamente eliminar ese parámetro int n, que ahora mismo no hace nada. (Fíjate que para usarlo en el ejemplo le he tenido que dar un valor, el cual no ha sido usado)

Código C++:
Ver original
  1. bool valida(string s)
  2. {
  3.     for (int i=0; i<s.size(); i++)
  4.     {
  5.         cout<<"Original: "<<s[i]<<" - Copia: "<<(char)tolower(s[i])<<endl;
  6.         if (s[i]!=(char)tolower(s[i]))
  7.         {
  8.             return false;
  9.         }
  10.     }
  11.     return (s.size()>=3 && s.size()<=8);
  12. }

Saludos!
__________________
Mi calculadora en Qt