[ Foro de C++ ]

ordenar alfabeticamente un vector de string

01-Jan-2017 01:11
Invitado (Ana Pallares)
1 Respuestas

¿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 ++;
	}
}
 


 


16-Jan-2017 12:29
Nacho Cabanes (+30)

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.






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...