SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: ltrigos en Viernes 1 de Agosto de 2008, 19:10

Título: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Viernes 1 de Agosto de 2008, 19:10
Hola como estan. Quisiera que me ayudaran con el siguiente codigo. Mi problema principal es la comparacion de las cadenas en la estructura IF, pues no se porque no puedo comparar caracteres. Sera mejor utilizaar strings para declarar las variables Nombre Y Apellido?.

//////////////////////////////////////////////////////////////////////////
# include <iostream>
# include <stdio.h>
# include <stdlib.h>
# include <string>
using namespace std;

void funcion (char Nombre, char Apellido, int *codigo)
{  
  if((Nombre== "leonardo")&&(Apellido== "trigos"))
  {
     *codigo=12345;        
  }
}

int main()
{
  char Nombre[20];
  char Apellido[20];
  printf("Introduce Nombre: ");
  scanf("%s",&Nombre);
  printf("Introduce Apellido: ");
  scanf("%s",&Apellido);
  funcion(Nombre, Apellido, &codigo);
  printf("La edad es: %dn",codigo);
 
  system("Pause");

  return 0;
 
}
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: Iganguli en Viernes 1 de Agosto de 2008, 19:39
las cadenas no se comparan con == se usa strcmp

if( !strcmp(nombre, "leonardo") && !strcmp(Apellido,"trigos") )

strcmp regresa 0 si son iguales, -1 si es meno y 1 si es mayor
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Viernes 1 de Agosto de 2008, 20:09
Intente con este codigo pero aun sin resultado. Podrian revisarlo...
Perdonen ser tan poco trucho en esto, apenas estoy comenzando...

Código: Text
  1. # include <iostream>
  2. # include <stdio.h>
  3. # include <stdlib.h>
  4. # include <string.h>
  5. using namespace std;
  6.  
  7. void funcion (string Nombre, string Apellido, int *codigo)
  8. {  
  9.   if( !strcmp(Nombre, "leonardo") && !strcmp(Apellido,"trigos") )
  10.   {
  11.      *codigo=12345;        
  12.   }
  13. }
  14.  
  15. int main()
  16. {
  17.   string Nombre;
  18.   string Apellido;
  19.   printf("Introduce Nombre: ");
  20.   srtd:cin >> Nombre;
  21.   printf("Introduce Apellido: ");
  22.   srtd:cin >> Apellido;
  23.   funcion(Nombre, Apellido, &codigo);
  24.   printf("La codigo es: %dn",codigo);
  25.  
  26.   system("Pause");
  27.  
  28.   return 0;
  29.  
  30. }
  31.  
  32.  
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: Iganguli en Viernes 1 de Agosto de 2008, 20:15
Citar
srtd:cin >> Nombre;
esto no es asi debe ser
Citar
std:cin >> Nombre
y falta declarar la variable codigo y como vas a trabajar en c++ utiliza la funcion compare de la clase string el cual su uso es asi

Código: Text
  1. if( !Nombre.compare("leonardo") && !Apellido.compare("trigo") )
  2.  
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Viernes 1 de Agosto de 2008, 20:46
Una pregunta mas...

Puedo leer caracteres string y escribirlos mediante los comandos: scanf y printf?...
Si, si se puede, como puedo hacerlo??
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: Iganguli en Viernes 1 de Agosto de 2008, 21:52
no al menos no declarendo la variable como string si lo quieres hacer usa un arreglo de caracteres
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: fachamix en Miércoles 6 de Agosto de 2008, 15:57
todo lindo, hermoso che.... pero .... la variables codigo .... a donde la declaras antes de enviarla como parametro de una funcion ????

es decir, vos tienes esto:

int main()
{
  string Nombre;
  string Apellido;
  printf("Introduce Nombre: ");
  srtd:cin >> Nombre;
  printf("Introduce Apellido: ");
  srtd:cin >> Apellido;
  funcion(Nombre, Apellido, &codigo); <---------------------------- DONDE ESTA DECLARADA CODIGO!!!!!!!!!!!!
  printf("La codigo es: %dn",codigo);
 
  system("Pause");
 
  return 0;
 
}

no existe la variable *codigo en el contexto de la funcion main()

entiendes ??? , necesitas .... o declarar int *codigo en main()  o declarar int *codigo en el contexto global del programa
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Jueves 7 de Agosto de 2008, 16:45
Gracias a todos por su ayuda... ;)
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: fachamix en Jueves 7 de Agosto de 2008, 16:49
al final ............ has solucionado o no ????? que era ?
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Jueves 7 de Agosto de 2008, 17:20
No aun no, me pasa algo raro. Al definir el codigo de la siguiente forma, me sale el error de invalid convertion int* to int en la linea 19

Código: Text
  1. # include <iostream>
  2. # include <stdio.h>
  3. # include <stdlib.h>
  4. # include <string.h>
  5. using namespace std;
  6.  
  7. void funcion(string, string, int, string);
  8.  
  9. int main()
  10. {
  11.   string Nombre;
  12.   string Apellido;
  13.   string Estado;
  14.   int codigo;
  15.   printf("Introduce Nombre: ");
  16.   std:cin >> Nombre;
  17.   printf("Introduce Apellido: ");
  18.   cin >> Apellido;
  19.   funcion(Nombre, Apellido, &codigo, &Estado);
  20.  
  21.   printf("El codigo es: %dn",codigo);
  22.   cout << Estado;
  23.  
  24.   system("Pause");
  25.  
  26.   return 0;
  27.  
  28. }
  29.  
  30. void funcion (string Nombre, string Apellido, int *codigo, string *Estado)
  31. {  
  32.   if( !Nombre.compare("leonardo") && !Apellido.compare("trigos") )
  33.   {
  34.      *codigo=200006354;
  35.      *Estado="soltero";        
  36.   }
  37. }
  38.  
  39.  
  40.  
  41.  

Pero con el  condigo que coloco a continuacion me sale perfecto:

Código: Text
  1. # include <iostream>
  2. # include <stdio.h>
  3. # include <stdlib.h>
  4. # include <string.h>
  5. using namespace std;
  6.  
  7. //void funcion(string, string, int, string);
  8.  
  9. void funcion (string Nombre, string Apellido, int *codigo, string *Estado)
  10. {  
  11.   if( !Nombre.compare("leonardo") && !Apellido.compare("trigos") )
  12.   {
  13.      *codigo=200006354;
  14.      *Estado="soltero";        
  15.   }
  16. }
  17.  
  18.  
  19. int main()
  20. {
  21.   string Nombre;
  22.   string Apellido;
  23.   string Estado;
  24.   int codigo;
  25.   printf("Introduce Nombre: ");
  26.   std:cin >> Nombre;
  27.   printf("Introduce Apellido: ");
  28.   cin >> Apellido;
  29.   funcion(Nombre, Apellido, &codigo, &Estado);
  30.  
  31.   printf("El codigo es: %dn",codigo);
  32.   cout << Estado;
  33.  
  34.   system("Pause");
  35.  
  36.   return 0;
  37.  
  38. }
  39.  
  40.  
  41.  
  42.  
  43.  

La diferencia en los codigos es que en el primer caso defino la funcion prototipo primero y luego defino la funcion funcion(despues de main) y en el segundo caso defino la funcion funcion (valga la redundancia) primero y luego main. No se que dices ustedes al respecto...
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: Iganguli en Jueves 7 de Agosto de 2008, 17:50
Código: Text
  1. void funcion(string, string, int, string);
  2. void funcion (string Nombre, string Apellido, int *codigo, string *Estado)
  3.  

fijate en esta declaraciones, veras lo que te falta son los * cuando le pongas esto no deberia tener ningun problema
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Jueves 7 de Agosto de 2008, 17:58
dices que le coloque * a todas las variables?

asi

void funcion (string *Nombre, string *Apellido, Int *codigo, string *Estado)  ?
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: fachamix en Jueves 7 de Agosto de 2008, 18:03
en una declaracion de prototipo del tipo:

void funcion1 (int); //estas diciendo que existe una funcion de nombre funcion1 , que retorna void, y toma como unico  
                              //argumento, un parametro del tipo int

se la llamaria asi:
....
int var1;
var1 = 123;
funcion1(var1);

---------------------------------
void funcion2(int *); //estas diciendo que existe una funcion de nombre funcion2 , que retorna void, y toma como unico  
                              //argumento, un parametro del tipo int *, es decir, un PUNTERO A UN ENTERO

se la llamaria asi:
....
int var1;
var1 = 123;
funcion2(&var1);

entiendes ahora ????

la primera llama por valor absoluto, la segunda llama por referencia.


espero te ayude
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: Iganguli en Jueves 7 de Agosto de 2008, 18:12
Citar
dices que le coloque * a todas las variables?
asi
void funcion (string *Nombre, string *Apellido, Int *codigo, string *Estado) ?

no solo a las 2 ultimas

Código: Text
  1. void funcion (string Nombre, string Apellido, Int *codigo, string *Estado)
  2.  
por que tal como lo dice fachamix cuanco invocas la funcion no le estas pasando una copia del valor sino una referencia que seria en el caso de codigo y estado
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: ltrigos en Jueves 7 de Agosto de 2008, 18:32
Listo amigos... ya pude corregir el problema

Muchas gracias...

Ltrigos
Título: Re: Dudas con C++ en Cadena de caracteres
Publicado por: fachamix en Jueves 7 de Agosto de 2008, 22:46
si señor, ahi va che.

adelante!