[ Foro de C++ ]
¿Hola, me podrían decir como llevar a cabo una función que me ordene el vector de forma alfabética?
He hecho estas funciones y no me da ningún error pero tampoco hace lo que debería hacer
/* Función para rellenar una nueva ficha */
persona pedir_persona (persona v[TAM], short num)
{
persona p;
short i;
string correo, nombre, apellidos;
bool ok;
ok = false;
cout << "Introduzca el apellido de la persona" << endl;
cin >> apellidos;
cout << "Introduzca el nombre de la persona " << endl;
cin >> nombre;
p.nombre = apellidos + ", " + nombre;
cout << p.nombre << endl;
cout << "Introduzca el correo electronico " << endl;
cin >> correo;
for (i = 0; i < num; i++)
{
if (v[i].correo == correo)
{
cout << "Este correo ya existe, introduzca otro " << endl;
cin >> correo;
i = 0;
}
}
p.correo = correo;
do
{
cout << "Introduzca la latitud" << endl;
cin >> p.latitud;
}while (p.latitud < 0);
do
{
cout << "Introduzca la longitud" << endl;
cin >> p.longitud;
}while (p.longitud < 0);
do
{
cout << "introduza su anyo de nacimiento" << endl;
cin >> p.anyo;
}while (p.anyo < 1930 || p.anyo > 2017);
do
{
cout << "Introduzca el sexo \nm-mujer \nh-hombre" << endl;
cin >> p.sexo;
switch (p.sexo)
{
case 'h':
ok = true;
break;
case 'm':
ok = true;
break;
default:
ok = false;
}
}while (ok != true);
do
{
cout << "Evalua tu interes acerca del cine" << endl;
cout << " 5- muchisimo \n4- mucho \n3- bastante \n2- poco \1- muy poco " << endl;
cin >> p.cine;
}while (p.cine < 1 || p.cine > 5);
do
{
cout << "Evalua tu interes acerca de la musica" << endl;
cout << " 5- muchisimo \n4- mucho \n3- bastante \n2- poco \1-- muy poco " << endl;
cin >> p.musica;
}while (p.musica < 1 || p.musica > 5);
cin.ignore();
return p;
}
/* Procedimiento para insertar la nueva ficha en una posición concreta en el fichero*/
void Insertar(persona v[TAM], short num, short pos, persona p)
{
short i;
if (num == 0)
{
v[num] = p;
num = num + 1;
}
else
{
for (i = pos; i < num + 1; i ++)
{
v[i + 1] = v[i];
}
v[pos] = p;
num = num + 1;
}
}
/*void anyadir_persona (persona p, persona v[TAM], short num)*/
void anyadir_persona (persona p, persona v[TAM], short & num, char & lpersona, char & lvector)
{
short i, j, k, caracteres;
i = 0;
j = 0;
k = 0;
p.nombre [k] = lpersona;
v[i].nombre[j] = lvector;
caracteres = p.nombre.length();
while ((short) lpersona != (short) lvector || (short) lpersona > (short) lvector)
{
i = i + 1;
p.nombre[k] = lpersona;
v[i].nombre[j] = lvector;
}
if (lpersona < lvector)
{
i = i - 1;
Insertar(v, num, i, p );
}
else
{
do
{
k = k + 1;
j = j + 1;
p.nombre[k] = lpersona;
v[i].nombre[j] = lvector;
if (lpersona < lvector)
{
i = i - 1;
Insertar(v, num, i, p );
}
}while (lpersona > lvector || k < caracteres);
num ++;
}
}
Para ordenar un vector de struct, puedes mirar algoritmos sencillos como la ordenación de burbuja. Crea una función adicional que ordene y (si es el caso), la llamas tras añadir cada nuevo dato.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)