viernes, 5 de abril de 2013

ORDENAMIENTO DE CADENAS


Día 2. Pregunta An->Al:

Tu ejercicio es tener que ordenar una cadena de caracteres y números ascendentemente, sin embargo, quiero que respetes las posiciones de números y letras.

Ejemplo:

cadena: murcielago
ordenada: acegilmoru

cadena: cba
ordenada: abc

cadena: 652134
ordenada: 123456

cadena: c3b2a1
ordenada: a1b2c3

cadena: cb321a
ordenada: ab123c

Resolución:


#include<iostream>
#include<conio.h>
#include<cstdio>
#include<string.h>
using namespace std;

struct elemento
{
char c;
struct elemento *sgte;
struct elemento *antr;
};
struct cadena
{
struct elemento *cab;
struct elemento *ult;
cadena(){cab=NULL;ult=NULL;}
}cad[2];

struct elemento *p=NULL;
struct elemento *q=NULL;

void cargar(char &c,bool nro)
{
p=cad[nro].cab;
c=p->c;
p->antr=NULL;
cad[nro].cab=cad[nro].cab->sgte;
delete p; 
}

void insertar(char &c,bool nro)
{
int est=0; bool band=false;
p=new elemento; q=cad[nro].cab;
p->c=c;
if(cad[nro].cab==NULL) {cad[nro].cab=cad[nro].ult=p; p->c=c; p->sgte=p->antr=NULL;}
else{
while(q!=NULL)
{
if(c<q->c) 
{
if(est==2)
{
p->antr=q->antr;
q->antr->sgte=p;
q->antr=p;
p->sgte=q;
band=true;
break;
}
q=q->antr;
est=1;
}
else
{
if(est==1)
{
p->sgte=q->sgte;
q->sgte->antr=p;
q->sgte=p;
p->antr=q;
band=true;
break;
}
q=q->sgte;
est=2;
}
}
if(band==false) 
{
if(est==1)
{
p->antr=NULL;
p->sgte=cad[nro].cab;
cad[nro].cab->antr=p;
cad[nro].cab=p;
}
if(est==2)
{
p->sgte=NULL;
p->antr=cad[nro].ult;
cad[nro].ult->sgte=p;
cad[nro].ult=p;
}
}
}
}

int main()
{
char text[200];
bool band;
int tam, i;
cout<<"Ingrese cadena: ";
gets(text);
tam=strlen(text);
for(i=0;i<tam;i++)
{
if(text[i]>47 && text[i]<58) band=0;
else band=1;
insertar(text[i],band);
}
for(i=0;i<tam;i++)
{
if(text[i]>47 && text[i]<58) band=0;
else band=1;
cargar(text[i],band);
}
cout<<text;
getch();
return 0;
}



Código fuente: http://www.mediafire.com/view/?bb5s64re5sa1kb5

No hay comentarios:

Publicar un comentario