Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Implementar función c++

Estas en el tema de Implementar función c++ en el foro de C/C++ en Foros del Web. Muy buenas a todos, necesitaría un empujón para implementar esta funcion en c++: bool valid(string, n) -Nos devuelve "cierto" sólo si todas las letras son ...
  #1 (permalink)  
Antiguo 27/11/2014, 14:37
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Implementar función c++

Muy buenas a todos, necesitaría un empujón para implementar esta funcion en c++:

bool valid(string, n)

-Nos devuelve "cierto" sólo si todas las letras son minusculas y su longitud está entre 3 y 8.

Os agradezco mucho vuestra ayuda, gracias un saludo!
  #2 (permalink)  
Antiguo 27/11/2014, 14:41
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Implementar función c++

if(valida("dsjk", 6))cout << "SI";
else cout<< "No";
cout<<endl;

if(valida("dsjkUP", 6))cout << "NO";
else cout<< "Si";
cout<<endl;

if(valida("dsjksa", 6))cout << "SI";
else cout<< "No";
cout<<endl;

En teoría el programa haría algo así no? lo que necesitaría sería la función.. gracias :P
  #3 (permalink)  
Antiguo 27/11/2014, 16:05
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Implementar función c++

Pasa el texto a minusculas y comprueba que las dos cadenas sean iguales. Si no son iguales esporque había alguna mayúscula.
  #4 (permalink)  
Antiguo 30/11/2014, 05:23
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Implementar función c++

Como paso el texto a minusculas? podrías decirme como seria esa funcion?
  #5 (permalink)  
Antiguo 30/11/2014, 05:29
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Implementar función c++

La función es esta (igual me expliqué mal desde el principio)

bool valida(string s, int n)
Devuelve cierto si el string s tiene sólo letras minusculas y tiene la longitud de n. n tiene que ser un valor entre 3 y 8.

Gracias
  #6 (permalink)  
Antiguo 30/11/2014, 05:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 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
  #7 (permalink)  
Antiguo 30/11/2014, 05:51
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Implementar función c++

Muchas gracias dehm de verdad, me estás ayudando mucho. El int n tendría que ser un valor entre 3 y 8, por ejemplo el 4 o el 6, es decir no debería ser un intervalo, simplemente un valor concreto.

Por lo demás todo genial ^^
  #8 (permalink)  
Antiguo 30/11/2014, 06:01
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Implementar función c++

Ahhh...entonces lo había entendido mal.

Por cierto, se podría hacer una pequeña mejora para optimizar el rendimiento.
Tal como está planteada la función, se puede dar el caso de que una cadena cumpla la condición de minúsculas, pero no la del tamaño.
Eso supone que obligo a la función a realizar todas las comparaciones entre caracteres, y luego comparar el tamaño.
Se puede optimizar si primero comparo el tamaño, que es algo inmediato, y sólo entonces paso a recorrer el bucle.
Código C++:
Ver original
  1. bool valida(string s, int n)
  2. {
  3.     if (s.size()!=n) return false;//salida inmediata de la función
  4.     for (int i=0; i<s.size(); i++)
  5.     {
  6.         cout<<"Original: "<<s[i]<<" - Copia: "<<(char)tolower(s[i])<<endl;
  7.         if (s[i]!=(char)tolower(s[i]))
  8.         {
  9.             return false;
  10.         }
  11.     }
  12.     return true;
  13. }

Saludos
__________________
Mi calculadora en Qt
  #9 (permalink)  
Antiguo 30/11/2014, 06:08
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Implementar función c++

Tengo una duda: que valor le has dado a n ?
  #10 (permalink)  
Antiguo 30/11/2014, 06:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Implementar función c++

Bueno, el valor de n lo defines tú cuando haces la llamada a la función.
Código C++:
Ver original
  1. int main()
  2. {
  3.     string cadena="aeddddddiou";
  4.     if (valida(cadena,5))//si quieres que la cadena válida tenga un tamaño de 5
  5.     {
  6.         cout<<"La cadena ES valida"<<endl;
  7.     }
  8.     else
  9.     {
  10.         cout<<"La cadena NO es valida"<<endl;
  11.     }
  12.     return 0;
  13. }
__________________
Mi calculadora en Qt
  #11 (permalink)  
Antiguo 30/11/2014, 06:15
 
Fecha de Ingreso: noviembre-2014
Mensajes: 22
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Implementar función c++

Solucionado, muchas gracias y perdona por mis escasos conocimientos :(

Etiquetas: funcion, implementar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:17.