0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 14
1

Сортировка строк в классе

17.02.2019, 21:24. Показов 998. Ответов 2

У меня есть класс:
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
class Planet
{
public:
    Planet(int l_name = 20);    // конструктор
    ~Planet();  // деструктор
 
private:
    char* pName;
    float   diam;
    bool  life;
    int   sput;
 
public:
    char* GetName() { return pName; }
    float GetDiam() { return diam; }
    bool GetLife() { return life; }
    int GetSput() { return sput; }
 
 
    void SetName(char* name)
    {
        int size = 0;
        for (size = 0; name[size] != '\0'; size++);
        delete[]pName;
        pName = new char[size + 1];
        for (int i = 0; i <= size; i++)
            pName[i] = name[i];
    }
    void SetDiam(float d) { diam = d; }
    void SetLife(bool L) { life = L; }
    void SetSput(int s) { sput = s; }
 
};
И функция сортировки: ( сортирует только имена, я знаю что одновременно надо перекидывать и все остальные объекты, но пока так)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int sortN(Planet* arr, int n)
{
    bool f;
    char buf[30]; //char* buf=new char[30];
    for (int i = 0; i < n - 1; i++)
    {
        f = 0;
        for (int j = 0; j < n - i - 1; j++)
        {
            if (strcmp(arr[j].GetName(),arr[j+1].GetName()) > 0)
            {
                buf = arr[j].GetName();//!!!
                arr[j].SetName(arr[j+1].GetName()); 
                arr[j+1].SetName(buf); //???
                f = 1;
            }
        }
        if (f == 0) break;
    }
    return 0;
}
У меня вопрос, если я использую динамический массив в классе, какой буфер мне нужно объявлять? При char buf[30]; выдает ошибку "E0137 выражение должно быть допустимым для изменения левосторонним значением", а при char* buf=new char[30]; на этапе //!!! в режиме отладки правильно присваивает значение, а на //??? , после выполнения строки до, забывает это значение и записывает в буфер мусор.
Как мне объявить этот буфер и использовать его в сортировке? Спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2019, 21:24
Ответы с готовыми решениями:

Сортировка строк в классе
Есть готовая программа. Нужно результаты выбить в алфавитном порядке. #include &lt;iostream&gt; using...

Сортировка в классе
Задание: Описать класс WORKER, содержащий следующие поля: •фамилия и инициалы работника;...

Сортировка в классе
Описать 2 метода (пузырька и выбора) в одном классе

Сортировка по алфавиту в классе
Всем привет, недавно тут спрашивал по поводу классов, вот появилась новая проблема: В классе...

2
446 / 332 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
18.02.2019, 07:50 2
Цитата Сообщение от Exploitation Посмотреть сообщение
Как мне объявить этот буфер
использовать везде человеческий string

Цитата Сообщение от Exploitation Посмотреть сообщение
C++
1
buf = arr[j].GetName();//!!! arr[j].SetName(arr[j+1].GetName()); arr[j+1].SetName(buf); //???
Попробовать функцию swap
0
19 / 17 / 7
Регистрация: 18.09.2017
Сообщений: 93
18.02.2019, 10:13 3
Делай проще:

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
#include <string>
#include <utility>
 
struct Planet
{
    std::string name;
    double diam;
    int sput;
    bool life;
 
    friend bool operator<(Planet const & x, Planet const & y) { return x.name < y.name; }
};
 
int sortN(Planet * arr, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        bool f = false;
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j + 1] < arr[j])
            {
                std::swap(arr[j], arr[j + 1]);
                f = true;
            }
        }
 
        if (!f) break;
    }
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2019, 10:13
Помогаю со студенческими работами здесь

Сортировка qsort в классе
Здравствуйте! Все никак не получается, решил обратиться за помощью. Как мне отсортировать массив...

Массив строк в классе
Пожалуйста, дайте пример такого массива)

Сортировка строки по алфавиту в классе String
Здравствуйте! Создал класс Stroka: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std;...

Сортировка в классе List по добавлению элемента
Мне нужно в методе push класса List добавлять элемент и сортировать список методом простых вставок,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru