Dev - C++ - Ayuda Ordenamiento alfabeticamente C++

 
Vista:
sin imagen de perfil

Ayuda Ordenamiento alfabeticamente C++

Publicado por Carlos (2 intervenciones) el 22/02/2015 15:28:16
Buenas, tengo que hacer un proyecto de una agenda digital con registro y todo tipo de dato estructurado, el enunciado dice lo siguiente :

Se introducirán todos los datos por entrada estándar. Se recibirá una variable
Op el cual indicará la opción a ejecutar dentro del programa:
1: Carga de contacto(s)
2: Ordenar
3: Buscar
4: Listar todos los contactos
5: Cerrar el programa

 Si se elige la opción 1, se esperará que se introduzca un N el cual representará
la cantidad de contactos a cargar, tras lo cual se empezarán a recibir los datos
correspondientes a cada contacto hasta el N.

 Si se elige la opción 2, se procederá a ordenar los contactos e inmediatamente
se listarán todos los contactos (opción 4).

 Si se elige la opción 3, se esperará recibir un nombre y apellido por el cuál
realizar la búsqueda.

 Si se elige la opción 4, se procederá a mostrar todos los contactos almacenados
hasta el momento. Tras completarse cada opción se regresará al menú de
opciones donde el usuario podrá elegir una nueva opción o cerrar el programa
(opción 5).

para cada uno de estas opciones debo hacer una función, ya hice todas menos la 2 la ordenar, ya que no entiendo como ordenar las letras del string para que me muestre los nombres de manera lexicografica.

El enunciado dice que se desarrollará la función ordenarporNombre(), la cual ordenará por nombre
lexicográficamente y de manera ascendente, es decir, como en los diccionarios.


Solo se permite el uso de las librerias string y iostream, si me pueden dar ejemplos de como se haria para ordenar alfabéticamente,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda Ordenamiento alfabeticamente C++

Publicado por vangodp (287 intervenciones) el 22/02/2015 22:59:51
te dejo un ejemplo. El bucle for que organiza los nombres lo pones en una función y lo adaptas a lo que necesitas.
http://codepad.org/Hc6SB1D5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <cstring>
#include <windows.h>
 
using namespace std;
 
int main(){
    int i, j, n;
    const int NUM = 4;
 
    //una estructura que almacenará los datos de un usuario. En ese caso solo un nombre para el ejemplo.
    typedef struct Contacto{
        //Datos
        char nombre[55];
    };
 
    Contacto agenda[NUM];  // Esto sera nuestra agenda de contactos para NUM contactos. =)
    Contacto temp;         // Lo usamos para guardar temporalmente los datos al organizar la agenda.     
 
    //Toma de datos
    for ( i = 0; i < NUM; i++ ) {
        cout << "\nEntre con el nombre para la posicion " << i << ": ";
        cin >> agenda[i].nombre;
    }
 
    system("cls");
    cout << "\n\n Mostrando nombres desordenados \n\n";
    for ( i = 0; i < NUM; i++ ){
        cout << "agenda.nombre[" << i << "]=\"" << agenda[i].nombre << "\";" << endl;
    }
 
    //Ordenando nombres
    for ( i = 0; i < NUM; i++ ){
        for ( int j = i + 1; j < NUM; j++ ){
 
            // strcoll() devuelve -1 si el 1º parametro es mayor que el 2º, 0 si el 1º es igual al 2º, o 
            //1 si el 1º mayor que el 2º. Lo hace caracter a caracter hasta encontrar una diferencia o un nulo que es cuando retorna uno de los valores mensionados.    
            if ( ( strcoll(/**/ agenda[i].nombre, /**/agenda[j].nombre) ) > 0 ) {
 
                //esto va subiendo los nombres a la cabeza de la lista
                strcpy ( temp.nombre, agenda[i].nombre );
                strcpy ( agenda[i].nombre, agenda[j].nombre );
                strcpy ( agenda[j].nombre, temp.nombre );
            }
        }
    }
 
    cout << "\n\n Mostrando nombres ordenados \n\n";
    for ( i = 0; i < NUM; i++ ){
        cout << "agenda.nombre[" << i << "]=\"" << agenda[i].nombre << "\";" << endl;
    }
 
    getchar();
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda Ordenamiento alfabeticamente C++

Publicado por Carlos (2 intervenciones) el 24/02/2015 01:17:18
Gracias, ya lo entendi un poco el unico problema que tengo es que de la libreria string solo puedo usar la funcion length y no ninguna otra, entonces todavia no veo una manera eficiente de sacar el ordenamiento rapido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar