jueves, 4 de abril de 2013

BUSQUEDA DE CONTACTOS

Día 1. Pregunta An->Al:

Crear una lista de contactos en dónde puedas buscar contactos con un mecanismo parecido al del celular (sugerencias). Por ejemplo. Escribo la letra "a" y me salen todos los nombres que empiezan con esa letra, escribo "al" y salen menos, pero todos los que empiezan con "al..." y así.

Resolución:



#include<iostream>
#include<conio.h>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

struct contacto
{
char nombre[20];
struct contacto *iz;
struct contacto *der;
};

struct contacto *rz=NULL;
struct contacto *p=NULL;
struct contacto *q=NULL;
int cont=0;
char nom[20];

int compara(char B[])
{
int tam1, tam2, i;
tam1=strlen(nom);
tam2=strlen(B);
if(tam1>tam2) return 1;
else
{
for(i=0;i<tam1;i++)

if(nom[i]>B[i]) return 1;
if(nom[i]<B[i]) return -1;
}
return 0; 
}
}

void buscar(contacto *r=NULL)
{
if(r==NULL) return;
if((compara(r->nombre))>0) {buscar(r->der);}
if((compara(r->nombre))==0) {cont++; cout<<r->nombre<<endl;buscar(r->iz);buscar(r->der);}
if((compara(r->nombre))<0) {buscar(r->iz);}
}

void ver(contacto *r=p)
{
if(r==NULL) return;
if(r->iz!=NULL) {ver(r->iz);}
cout<<r->nombre<<endl;
if(r->der!=NULL) {ver(r->der);}
}

void nuevo()
{
system("cls");
fflush(stdin);
p=new contacto;
cout<<"Nombre de contacto: ";
gets(p->nombre);
p->iz=p->der=NULL;
if(rz==NULL) rz=p;
else{
q=rz;
while(q!=NULL)
{
if(strcmp(p->nombre,q->nombre)>0) 
{
if(q->der==NULL) 
{
q->der=p;
break;
}
q=q->der; continue;
}
if(strcmp(p->nombre,q->nombre)<0) 
{
if(q->iz==NULL) 
{
q->iz=p;
break;
}
q=q->iz; continue;
}
if(strcmp(p->nombre,q->nombre)==0)
{
cout<<"Ese contacto ya existe"; getch(); return;

}
}
}

int main()
{
int opc; 
do{
system("cls");
cout<<endl<<endl<<endl<<endl<<endl;
cout<<"\t\t\tIngresar contacto.........[1]"<<endl;
cout<<"\t\t\tVer lista completa........[2]"<<endl;
cout<<"\t\t\tBuscar contactos..........[3]"<<endl;
cout<<"\t\t\tSALIR.....................[4]"<<endl;
cout<<"\t\t\tOpcion: "; cin>>opc;
switch(opc)
{
case 1: nuevo() ;break;
case 2: system("cls"); p=rz; ver(); getch(); break;
case 3: 
system("cls");
fflush(stdin);
cout<<"Buscar: "; gets(nom);
cont=0;
buscar(rz); 
cout<<"Se encontraron "<<cont<<" resultados";
getch();
break;
};
}while(opc!=4);
return 0;
}


No hay comentarios:

Publicar un comentario