Форум программистов, компьютерный форум CyberForum.ru

Сортировка объектов через указатели, основанная на алфавитном порядке имен - C++

Восстановить пароль Регистрация
 
Purcell
 Аватар для Purcell
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
19.05.2014, 10:45     Сортировка объектов через указатели, основанная на алфавитном порядке имен #1
Нашел в книге пример сортировки объектов, содержащих поле типа string, через указатели. Сортировка основана на алфавитном порядке имен. После примера в книге написано о функции order(), что "мы воспользовались библиотечной функцией C++ strcmp()." Я удивился, так как в функции order() я не увидел функцию strcmp(). Каким в таком случае образом функция order() сортирует в алфавитном порядке?

C++
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
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <string>
using namespace std;
////////////////////////////////////////////////////////////
class Person                // некоторый человек
{
    protected:
        string name;        // имя
    public:
        void setName()      // установка имени
        { cout << "Введите имя: "; cin >> name; }
        void printName()    // показ имени
        { cout << endl << name; }
        string getName()    // получение имени
        { return name; }
};
////////////////////////////////////////////////////////////
int main()
{
    void bsort(Person**, int);      // сортировка указателей
    Person* persPtr [ 100 ];        // массив указателей на person
    int n = 0;                      // количество элементов в массиве
    char choice;                    // переменная для выбора
 
    do
    {
        persPtr [ n ] = new Person;      // новый объект
        persPtr [ n ] -> setName();      // ввод имени
        n++;
        cout << "Продолжить ввод(y/n)? ";
        cin >> choice;
    }
    while( choice == 'y');
 
    cout << endl << "Неотсортированный список: ";
    for (int j = 0; j < n; j++)
        persPtr [ j ] -> printName();
 
    bsort (persPtr, n);              // сортировка указателей
 
    cout << endl << "Отсортированный список: ";
    for (int j = 0; j < n; j++)
        persPtr [ j ] -> printName();
    cout << endl;
 
    return 0;
}
////////////////////////////////////////////////////////////
void bsort(Person** pp, int n)       // сортировка указателей
{
    void order(Person**, Person**);  // сортировка двух элементов
    int j, k;
 
    for (j = 0; j < n; j++)
        for (k = j + 1; k < n; k++)
            order(pp + j, pp + k);   // сортировка двух элементов
}
////////////////////////////////////////////////////////////
void order(Person** pp1, Person** pp2)  // сортировка двух элементов
{
    if((*pp1) -> getName() > (*pp2) -> getName())  // если первая строка больше второй
    {
        Person* tempptr = *pp1;                    // они меняются местами
        *pp1 = *pp2;
        *pp2 = tempptr;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 10:45     Сортировка объектов через указатели, основанная на алфавитном порядке имен
Посмотрите здесь:

C++ сортировка строки в алфавитном порядке
Сортировка строк в алфавитном порядке C++
Сортировка строк в алфавитном порядке C++
Сортировка в алфавитном порядке... C++
Сортировка структур в алфавитном порядке C++
C++ Сортировка структур в алфавитном порядке
Сортировка в алфавитном порядке C++
C++ Сортировка слов в алфавитном порядке

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kupnu4
26 / 26 / 9
Регистрация: 03.05.2013
Сообщений: 71
19.05.2014, 11:09     Сортировка объектов через указатели, основанная на алфавитном порядке имен #2
у тебя тут обычный пузырьковый алгоритм. order меняет местами два элемента если второй меньше первого.
Purcell
 Аватар для Purcell
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
20.05.2014, 00:00  [ТС]     Сортировка объектов через указатели, основанная на алфавитном порядке имен #3
у тебя тут обычный пузырьковый алгоритм. order меняет местами два элемента если второй меньше первого.
А что значит "меньше" в данном случае? Оператор сравнения сравнивает ASCII-коды отдельных символов? Вот что мне не понятно.

Добавлено через 12 часов 27 минут
Всё, сам разобрался. Оператор сравнения ">" перегружен для типа string так, чтобы сравнения были лексикографическими (учет алфавитного порядка отдельных символов). А функция strcmp() работает с char. Автор книги напутал.
Yandex
Объявления
20.05.2014, 00:00     Сортировка объектов через указатели, основанная на алфавитном порядке имен
Ответ Создать тему
Опции темы

Текущее время: 08:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru