[ 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 (+83)

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.)