SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: fabrizzio en Miércoles 27 de Septiembre de 2006, 18:22
-
que tal , estoy haciendo un programa AGENDA, con listas dobles enlazadas, que me almacene los campos que estan en la estructura, trate de ordenarlos al momento que los estoy ingresando, pero se me hizo complicado y llegue a la conclusion de que seria mejor hacer otra funcion ORDENA; el problema esta en que no puedo ordenar porque no puedo decir por ejemplo aux->nombre>nuevo->nombre
pienso que no funciona porque son cadenas de carecteres y no numemos.
entonces trate de convertir la cadena a numero con la funcion atoi pero no funciono, tambien trate de usar la funcion strcmp pero nada, pliz ayuda ..
aqui alzo parte del codigo para que tengan idea
struct agenda
{
char nombre[20];
char cedula[10];
char telefono[6];
int parentezco;
agenda *ant;
agenda *sig;
};
void crear_nodo()
{
nuevo=new agenda;
nuevo->sig=NULL;
nuevo->ant=NULL;
}
void ingreso()
{
char op = 's';
char nombre[20];
char cedula[10];
char telefono[6];
int parentezco;
while (op=='s')
{
clrscr();
cout<<"Ingrese los siguientes datos, para salir en nombre ingrese'#'\n";
cout<<"Parentezco: 1.-Familia, 2.-amigos, 3.-Trabajo\n";
cout<<"C‚dula: ";cin>>cedula;
cout<<"Nombre: ";cin>>nombre;
cout<<"telefono: ";cin>>telefono;
cout<<"Parentezco: ";cin>>parentezco;
cout<<"Desea ingresar otro dato? s/n";op=getche();
crear_nodo();
strcpy(nuevo->cedula,cedula);
strcpy(nuevo->nombre,nombre);
strcpy(nuevo->telefono,telefono);
nuevo->parentezco=parentezco;
if(ini==NULL)
{
ini=fin=nuevo;
}
else
{
nuevo->ant=fin;
fin->sig=nuevo;
fin=nuevo;
}
};
}
-
Hola, bueno tienes que crear una funcion que examine caracter por caracter las 2 cadenas, mandas a una funcion las 2 cadenas como argumentos y haces un ciclo hasta que una de las 2 cadenas termine y alli si podrias preguntar algo asi
if(aux->nombre > nuevo->nombre)
{
//aux es mayor que nuevo, por ejemplo aux es "carro" y nuevo es "arbol"
----
----
----
}
. y asi si podrias ordenarlos.
De todas maneras lo que se estila en estos casos es usar un campo clave, algo que no se repita y por lo general numerico. en tu caso seria la cedula o el telefono del contacto.
Espero te ayude...
-
Se me olvidaba, tambien puedes usar la funcion strcmp de la "string.h". a esa funcion le mandas las 2 cadenas y depende del valor que te devuelva sabras cual cadena es mayor alfabéticamente hablando o si son iguales.
-
Trata de usar punteros a punteros de tal manera que a la hora de ordenarlos solo necesitas direccionar los punteros (o apuntadores) de mayor a menor o de menor a mayor segun el orden que quieras. Ahorras memoria ya q no copias nada y el programa se vuelve mas eficiente.
Saludos.