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