Сортировка в алфавитном порядке

Нужно отсортировать записи в структуре STUDENT в алфавитном порядке, но функция не сортирует записи. Как это исправить? Вот код:

#include <cstdlib>
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;

struct STUDENT
{
    char LastName[30]; char FirstName[30]; char MiddleName[30]; int group; short marks[5];
};

void Sort(STUDENT* A, int n);

int main()
{
    setlocale(LC_ALL, "ukr");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n = 0;
    cout << "Введіть кількість студентів: ";
    cin >> n;
    cout << endl;
    STUDENT* A = new STUDENT[n];
    int i = 0, j = 0, posr = 0;
    short index = 0;
    for (i = 0; i < n; i++)
    {
        cout << "Введіть прізвище студента " << i + 1 << endl;
        cin >> A[i].LastName;
        cout << endl;
        cout << "Введіть ім'я студента " << i + 1 << endl;
        cin >> A[i].FirstName;
        cout << endl;
        cout << "Введіть по-батькові студента " << i + 1 << endl;
        cin >> A[i].MiddleName;
        cout << endl;
        cout << "Введіть номер групи студента " << i + 1 << endl;
        cin >> A[i].group;
        cout << endl;
        cout << "Введіть оцінки судента " << i + 1 << endl;
        cin >> A[i].marks[0] >> A[i].marks[1] >> A[i].marks[2] >> A[i].marks[3] >> A[i].marks[4];
        cout << endl;
    }
    Sort(A, n);
    for (int i = 0; i < n; i++)
    {
        cout << A[i].LastName << " " << A[i].FirstName << " " << A[i].MiddleName << ",  " << A[i].group << " група" << endl;
    }

    j = 0;
    cout << endl;
    cout << "Студенти, середній бал яких більший за 4.2:" << endl;
    for (i = 0; i < n; i++)
        if ((float)(A[i].marks[0] + A[i].marks[1] + A[i].marks[2] + A[i].marks[3] + A[i].marks[4]) / 5 > 4.2)
        {
            cout << A[i].LastName << " " << A[i].FirstName << " " << A[i].MiddleName << ",  " << A[i].group << " група" << endl;
            j++;
        }
    if (j == 0) cout << "Студентів з середнім балом 4.2 немає" << endl;
    j = 0;
    cout << endl;
    cout << "Студенти, які мають хоч б одну 2:" << endl;
    for (i = 0; i < n; i++)
        if (A[i].marks[0] == 2 || A[i].marks[1] == 2 || A[i].marks[2] == 2 || A[i].marks[3] == 2 || A[i].marks[4] == 2)
        {
            cout << A[i].LastName << " " << A[i].FirstName << " " << A[i].MiddleName << ",  " << A[i].group << " група" << endl;
            j++;
        }
    if (j == 0) cout << "Студентів з хоча б одною 2 немає" << endl;
    return 0;
}

void Sort(STUDENT* A, int n)
{
    char* temp;
    int top, seek;
    for (top = 0; top < n - 1; top++)
    {
        for (seek = top + 1; seek < n; seek++)
        {
            if (strcmp(A[top].LastName, A[seek].LastName) > 0)
            {
                temp = A[top].LastName;
                A[top].LastName = A[seek].LastName;
                A[seek].LastName = temp;
            }
        }
    }
}

Буду благодарный за все ответы)


Ответы (1 шт):

Автор решения: goldstar_labs

вместо имени меняем элементы целиком

void Sort(STUDENT* A, int n)
{
    STUDENT temp;
    int top, seek;
    for (top = 0; top < n - 1; top++)
    {
        for (seek = top + 1; seek < n; seek++)
        {
            if (strcmp(A[top].LastName, A[seek].LastName) > 0)
            {
                temp = A[top];
                A[top] = A[seek];
                A[seek] = temp;
            }
        }
    }
}
→ Ссылка