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

[SOLUCIONADO] Problema con unary_negate

Estas en el tema de Problema con unary_negate en el foro de C/C++ en Foros del Web. Buenas estoy escribiendo la siguiente funcion @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <iostream> #include <cstring> #include <functional> #include <algorithm>   using namespace std ; ...
  #1 (permalink)  
Antiguo 07/04/2014, 14:43
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 0
Problema con unary_negate

Buenas estoy escribiendo la siguiente funcion
Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. #include <functional>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. class EsDigito {
  9. public:
  10.   bool operator() (const char& c) const { return isdigit(c); }
  11. };
  12.  
  13. int main() {
  14.   unary_negate<bool> EsAlfabetico (EsDigito);
  15.   char letras2[] = " 452485A56321";
  16.   inicio = letras;
  17.   fin = letras + sizeof(letras)/sizeof(char);
  18.  
  19.   if (find_if(inicio,fin,EsAlfabetico()))
  20.     cout << "Alfabetico" << endl;
  21.   return 0;
  22. }

Cuando compilo me sale el siguiente error:

prueba.cpp:35:39: error: faltan argumentos para la función ‘std::unary_negate<bool> EsAlfabetico(EsDigito)’
prueba.cpp:30:22: nota: se declara aquí


Alguien me puede explicar el por qué

Última edición por DvNe; 07/04/2014 a las 14:49
  #2 (permalink)  
Antiguo 07/04/2014, 16:12
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema con unary_negate

La linea 14: unary_negate<bool> EsAlfabetico (EsDigito);

es la declaracion de una funcion.

La invocas en la linea 19, sin un parámetro. Pero en la linea 14 dijiste que recibiría 1.
Estás en contradicción y el compilador te lo está echando en cara.

Sospecho que estas intentando usar functores, no funciones.
Creo que el código lo puedes mejorar asi:

1. Define un objeto de tipo EsDigito
2. Define un objeto de tipo unary_negate<bool> que se construya con el objeto definido en 1.
3. Al invocar find_if usa el objeto definido en 2.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 08/04/2014, 06:18
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con unary_negate

Bien ahora ya no se queja al compilar. Ahora bien, necesito crear una función que me diga si una cadena de caracteres de bajo nivel tiene letras entre los digitos para lo cual he implementado la siguiente función pero me da fallo:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. #include <functional>
  4. #include <algorithm>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. class EsDigito {
  10. public:
  11.   bool operator() (const char& c) const { return isdigit(c); }
  12.   typedef char argument_type;
  13. };
  14.  
  15.  
  16. int main() {
  17.    string s = "4539 4512 0AA398 7356";
  18.  
  19.   EsDigito esdigito;
  20.   unary_negate<EsDigito> EsAlfabetico (esdigito);
  21.  
  22.   char* inicio, *fin;
  23.   char* letras2 = new char[s.length() + 1];
  24.  
  25.   strcpy(letras2,s.c_str());
  26.  
  27.   inicio = letras2;
  28.   fin = letras2 + sizeof(letras2)/sizeof(char);
  29.  
  30.   if (find_if(inicio,fin,EsAlfabetico) != fin)
  31.     cout << "Hay letras\n";
  32.  
  33.   return 0;
  34. }
  #4 (permalink)  
Antiguo 08/04/2014, 07:06
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema con unary_negate

No estas recorriendo todo el arreglo.
"fin" no esta apuntando al fin del arreglo.
Compruebalo imprimiendo en el operator() el valor del char que recibe.

Sugiero
fin = letras2 + s.length()

o algo parecido a esto.
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 08/04/2014, 07:42
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Problema con unary_negate

Sí era ese el problema, no estaba llegando a final del numero. Muchas gracias

Etiquetas: funcion, int, string
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 18:19.