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

Ayuda con codigo

Estas en el tema de Ayuda con codigo en el foro de C/C++ en Foros del Web. Hola. Estoy haciendo una especie de agenda de telefonos. Una de las funciones se usara para buscar un numero de telefono introduciendo el nombre del ...
  #1 (permalink)  
Antiguo 06/08/2008, 02:14
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 15 años, 9 meses
Puntos: 0
Ayuda con codigo

Hola. Estoy haciendo una especie de agenda de telefonos. Una de las funciones se usara para buscar un numero de telefono introduciendo el nombre del contacto. Yo lo hice tal que asi :


struct contacto
{
char nombre[30];
int telefono;
};

int main(int argc, char *argv[])
{
struct contacto estructura[5];

int k;

....
cout << "Introduzca el nombre del contacto" << endl;
char aux[30];
cin >> aux;
k = buscar_por_nombre(aux, estructura);
cout <<"El telefono es: " << estructura[k].telefono << endl;
.....

system("PAUSE");
return EXIT_SUCCESS;
}

int buscar_por_nombre(char aux[30], struct contacto *estructura)
{
int posicion = 0;

for(int i=0; i<5; i++)
{
if(estructura[i].nombre == aux)
posicion = i;
}
return posicion;
}

Los contactos estan almacenados en un array de estructuras. Lo que hace la funcion es recorrer el array hasta que encuentra el nombre. Creo que el problema esta en que no se manejar muy bien los strings, porque hice exactamente lo mismo pero comparando dos variables int en lugar de char y me funciono a la perfeccion.
Un saludo
  #2 (permalink)  
Antiguo 06/08/2008, 02:29
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 5 meses
Puntos: 24
Respuesta: Ayuda con codigo

Para comparar cadenas de caracteres puedes usar la funcion strcmp(). Te devolvera 0 cuando sean iguales, y 1 ó -1 (valores que se usan para ordenar) cuando sean distintas.
Código:
int buscar_por_nombre(char aux[30], struct contacto *estructura)
{
  int posicion = -1; // Valor especial para cuando no se encuentra

  for(int i=0; i<5; i++)
  {
    if ( strcmp(estructura[i].nombre,aux)==0 )
    {
      posicion = i;
      break; // Para no seguir buscando, pues ya lo he encontrado
    }
  }
  return posicion;
}
NOTA: Tambien existe la funcion strncmp() para comparar un numero máximo de caracteres.
__________________
Grupos de Música
Pop Music Stars
  #3 (permalink)  
Antiguo 06/08/2008, 03:21
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda con codigo

Asi ya me funciona, gracias
  #4 (permalink)  
Antiguo 06/08/2008, 03:37
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 5 meses
Puntos: 24
Respuesta: Ayuda con codigo

Me alegro.
Por cierto, deberías acostumbrarte a no crear dependencias entre las funciones.
En tu ejemplo, estás usando la constante 5, para el bucle for. Dicha constante debería ser una variable recibida como parámetro en la función. De ese modo dicha función sería independiente y podría ser reutilizada para tratar otras estructuras con más elementos.
__________________
Grupos de Música
Pop Music Stars
  #5 (permalink)  
Antiguo 06/08/2008, 13:58
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda con codigo

Gracias por el consejo, pero el ejercicio es solo para aprender a usar estructuras, no tiene una utilidad real. Pero de todas formas gracias.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:27.