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

qsort и массивы

08.03.2021, 14:49. Показов 495. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сортирует правильно, но с именами беда, где-то написано верно, где-то нет, где-то букв не хватает, где-то лишние.
Насколько я понимаю проблема в том что string занимает разное количество памяти. Как исправить?

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
#include <cstdlib>
#include <iostream>
#include <string>
 
using namespace std;
 
struct student {
    int grade;
    int studentID;
    string name;
};
 
void print(student Array[], const int size)
{
    for (int i = 0; i < size; ++i)
        cout << Array[i].grade << ' ' << Array[i].studentID
             << ' ' << Array[i].name << '\n';
}
 
int main()
{
    const int ARRAY_SIZE = 10;
    student studentArray[ARRAY_SIZE] = {
        { 87, 10001, "Fred" },
        { 28, 10002, "Tom" },
        { 100, 10003, "Alistair" },
        { 78, 10004, "Sasha" },
        { 84, 10005, "Erin" },
        { 98, 10006, "Belinda" },
        { 75, 10007, "Leslie" },
        { 70, 10008, "Candy" },
        { 81, 10009, "Aretha" },
        { 68, 10010, "Veronica" }
    };
    print(studentArray, ARRAY_SIZE);
    cout << endl;
    qsort(studentArray, ARRAY_SIZE, sizeof(student), [](const void* lhs, const void* rhs) {
        student llhs = *static_cast<const student*>(lhs);
        student rrhs = *static_cast<const student*>(rhs);
        return llhs.grade - rrhs.grade;
    });
    print(studentArray, ARRAY_SIZE);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2021, 14:49
Ответы с готовыми решениями:

qsort
читал, что с помощю QSORT можно упорядочить масив, но не пишет как. помогите!!

qsort
int *noth_ar=new int ; //-------------------------------------------- int noth_cmp(const void...

qsort
Ребят,расскажи подробно и простенько про qsort;Видел тему,но ничего не понял.Я новичек еще можно...

qsort C++
Помогите, плиз,разобраться с этой функцией, я прогу написала, но мало чего понимаю в ней, я...

7
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.03.2021, 14:57 2
Цитата Сообщение от EvilingDark Посмотреть сообщение
Насколько я понимаю проблема в том что string занимает разное количество памяти. Как исправить?
Только вот так, либо нужно работать с массивом указателей
C++
1
2
3
4
5
struct student {
    int grade;
    int studentID;
    char name[256];
};
Добавлено через 47 секунд
qsort копирует структуры побайтово, с std::string так нельзя

Добавлено через 2 минуты
Либо
C++
1
2
3
4
5
struct student {
    int grade;
    int studentID;
    char *name;
};
и не забывать потом удалять эту name
1
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
08.03.2021, 15:04 3
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
с std::string так нельзя
можно , пжлста, по точнее - где нельзя?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// GCC 4.9.2 C++03
#include <iostream>
#include <string>
 
struct student
{   int        grade;
    int    studentID;
    std::string name;
};
 
int main()
{   student a = {1,2,"1234567890123456789012345678901234567890123456789\n"};
    student b;
            b = a;
            
    std::cout << "sizeof(student) = " << sizeof(student) << '\n'
              << b.name;
}
0
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
08.03.2021, 15:12 4
добавил наглядности:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
struct student
{   int        grade;
    int    studentID;
    std::string name;
};
 
int main()
{   student a = {1,2,"1234567890123456789012345678901234567890123456789\n"};
    student b;
            b = a;
            a.name = "zxcvbnmzxcvbnmzxcvbnmzxcvbnmzxcvbnmzxcvbnmzxcvbnm\n";
            
    std::cout << "sizeof(student) = " << sizeof(student) << '\n'
              << b.name;
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.03.2021, 15:18 5
Цитата Сообщение от XLAT Посмотреть сообщение
можно , пжлста, по точнее - где нельзя?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    std::string s1 = "12345678901234567890123456789012345678901234567890";
    std::cout << s1 << std::endl;
    std::cout << "this  = " << &s1 << std::endl;
    std::cout << "c_str = " << (void *)s1.c_str() << std::endl;
        
    std::string s2;
    memcpy((void *)&s2, (void *)&s1, sizeof(std::string));
 
    std::cout << s2 << std::endl;
    std::cout << "this  = " << &s2 << std::endl;
    std::cout << "c_str = " << (void *)s2.c_str() << std::endl;
 
    std::cout << (s1.c_str() == s2.c_str()? "ERROR!!": "OK") << std::endl;
 
}
Добавлено через 1 минуту
XLAT, пжалста, нате, специально для тебя
0
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
08.03.2021, 15:42 6
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
пжалста, нате, специально для тебя
и что?
ты считаешь, что смешать си с крестами это и есть тру-программирование???

EvilingDark, qsort это сишная хрень,
вам нужно определиться на каком языке вы пишите свою прогу,
судя по хедерам и текущему разделу форума - C++

тогда ваш выбор std::sort
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.03.2021, 15:43 7
Цитата Сообщение от XLAT Посмотреть сообщение
ты считаешь, что смешать си с крестами это и есть тру-программирование???
Очевидно, что я считаю, что
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
qsort копирует структуры побайтово, с std::string так нельзя
А насчёт "крестов", "тру-программирования" и прочей детской херни, я вообще ничего не считаю.
0
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 200
09.03.2021, 05:57  [ТС] 8
Цитата Сообщение от XLAT Посмотреть сообщение
EvilingDark, qsort это сишная хрень,
вам нужно определиться на каком языке вы пишите свою прогу,
судя по хедерам и текущему разделу форума - C++
Да я бы в жизни не прикоснулся к массивам когда есть array, vector. Так же как и к qsort, когда есть sort. Просто я читаю Спрол А. - Думай как программист.
0
09.03.2021, 05:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2021, 05:57
Помогаю со студенческими работами здесь

qsort
Вот код: #include &lt;cstdio&gt; #include &lt;algorithm&gt; int compare(const void *s1, const void *s2) {...

qSort
Есть класс: class Student { public: QString name; QString last_name; QString phone_number;...

qsort
Вот код программы. Посмотрите вопрос в комментарии. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Vector and qsort
Здравствуйте, есть код: #include &quot;iostream&quot; #include &quot;vector&quot; using namespace std; int...

Неправильный Qsort
==Delphi7 Если я использую классику сортировки, то все сортируется правильно, даже если я...

не работает qsort
Возникла проблема: в MSVS 2010 данный код выполняется неправильно, массив не сортируется,этот же...


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

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

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