Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Purcell
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
#1

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

19.05.2014, 10:45. Просмотров 690. Ответов 2
Метки нет (Все метки)

Нашел в книге пример сортировки объектов, содержащих поле типа 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;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 10:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка объектов через указатели, основанная на алфавитном порядке имен (C++):

Сортировка в алфавитном порядке... - C++
Здравствуйте, не могли бы вы помочь мне с задачей? Просто мы на лекциях ещё не разобрали как работать с файлами и текстом на C++, а на...

Сортировка в алфавитном порядке - C++
Написал скрипт сортировки по алфавиту. По идее работать должен, но к сожалению не работает. Вот код: struct stud{ char...

Сортировка слов в алфавитном порядке - C++
Задан любой текст.Выпонить сортировку слов этого текста в алфавитном порядке.

Сортировка структур в алфавитном порядке - C++
Есть массив структур, которые содержат русское слово и его английский перевод. Надо отсортировать по английским словам в алфавитном...

Сортировка структур в алфавитном порядке - C++
Отсортировать в алфавитном порядке по &quot;TIP&quot;. #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;string.h&gt; using namespace std; ...

Сортировка структур в алфавитном порядке - C++
Помогите пожалуйста, как сделать сортировку структур по алфавиту?) Заранее спасибо!) Программа осуществляет:  ввод с клавиатуры данных...

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

Добавлено через 12 часов 27 минут
Всё, сам разобрался. Оператор сравнения ">" перегружен для типа string так, чтобы сравнения были лексикографическими (учет алфавитного порядка отдельных символов). А функция strcmp() работает с char. Автор книги напутал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 00:00
Привет! Вот еще темы с ответами:

Сортировка строк в алфавитном порядке - C++
Собственно сабж) Вроде бы сделал что-то похожее, но ошибка запрета доступа, если вводить строки с клавиатуры (понимаю, что не выделил...

Сортировка слов в алфавитном порядке - C++
Дан текст из несколько слов. Нужно вывести слова в алфавитном порядке по первой букве.

Сортировка строк в алфавитном порядке - C++
Помогите пожалуйста написать программу для сортировки строк в алфавитном порядке Программа открывает фаил input.txt и отоброжает его...

сортировка строки в алфавитном порядке - C++
как сделать так, чтоб программа выводила строку с повторами ? то есть ввожу abcddff программа выведет abcdf нужно чтоб...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.