Untitled

 avatar
unknown
plain_text
2 years ago
5.0 kB
6
Indexable
// ConsoleApplication6.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//

#include <iostream>
using namespace std;
struct pepl {
    char cl[4] =""; // на один элемент больше потому что \0 учитываем
    char name[21] = "";
    char fam[21] = "";
    char dob[9] = "";
}; 

int main()
{ 
    int n;
    cin >> n;
    pepl *p_ptr = new pepl[n];
    char cl[4] = "";// на один элемент больше потому что \0 учитываем
    char name[21] = "";
    char fam[21] = "";
    char dob[9] = "";
    for (int i = 0; i < n; i++) {

        cin >> fam >> name >> cl >> dob;
        for (int j = 0; j < 4; j++) p_ptr[i].cl[j] = cl[j];
        for (int j = 0; j < 21; j++) p_ptr[i].name[j] = name[j];
        for (int j = 0; j < 21; j++) p_ptr[i].fam[j] = fam[j];
        for (int j = 0; j < 9; j++) p_ptr[i].dob[j] = dob[j];
        //cout << p_ptr[i].fam << " " << p_ptr[i].name << " " << p_ptr[i].cl << " " << p_ptr[i].dob<<endl;
    }
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < n; j++)
        {
            // если класс j-1 больше чем j то свап
            // если они в классах до 10
                if (p_ptr[j - 1].cl[2] == '\0' && p_ptr[j].cl[2] == '\0') {
                if (p_ptr[j - 1].cl[0] > p_ptr[j].cl[0]) {
                    pepl tmp = p_ptr[j];
                    p_ptr[j] = p_ptr[j - 1];
                    p_ptr[j - 1] = tmp;
                }
                // если номер класса одинаковый то сравниваем букву
                if (p_ptr[j - 1].cl[0] == p_ptr[j].cl[0]) {
                    if (p_ptr[j - 1].cl[1] > p_ptr[j].cl[1]) {
                        pepl tmp = p_ptr[j];
                        p_ptr[j] = p_ptr[j - 1];
                        p_ptr[j - 1] = tmp;
                    }
                }
                //если классы одинаковые то сравниваем фамилии
                if (p_ptr[j - 1].cl[0] == p_ptr[j].cl[0] && p_ptr[j - 1].cl[1] == p_ptr[j].cl[1]) {
                    int f = 0;
                    bool b = 0;
                    while (!b && p_ptr[j - 1].fam[f] != '\0' && p_ptr[j].fam[f] != '\0' && p_ptr[j - 1].fam[f] >= p_ptr[j].fam[f]) {
                        if (p_ptr[j - 1].fam[f] > p_ptr[j].fam[f]) {
                            pepl tmp = p_ptr[j];
                            p_ptr[j] = p_ptr[j - 1];
                            p_ptr[j - 1] = tmp;
                            b = 1;
                        }
                        f++;
                    }
                }

            }
            // если первый в 10/11 а второй до 10 то меняем смело
            if (p_ptr[j - 1].cl[2] != '\0' && p_ptr[j].cl[2] == '\0') {
                    pepl tmp = p_ptr[j];
                    p_ptr[j] = p_ptr[j - 1];
                    p_ptr[j - 1] = tmp;
            }
            if (p_ptr[j - 1].cl[2] != '\0' && p_ptr[j].cl[2] != '\0') {
                // если оба в 10+, то сравниваем вторую цифру класса
                if (p_ptr[j - 1].cl[1] > p_ptr[j].cl[1]) {
                    pepl tmp = p_ptr[j];
                    p_ptr[j] = p_ptr[j - 1];
                    p_ptr[j - 1] = tmp;
                }
                // также если номер одинаковый то по букве
                if (p_ptr[j - 1].cl[1] == p_ptr[j].cl[1]) {
                    if (p_ptr[j - 1].cl[2] > p_ptr[j].cl[2]) {
                        pepl tmp = p_ptr[j];
                        p_ptr[j] = p_ptr[j - 1];
                        p_ptr[j - 1] = tmp;
                    }
                }
                //если классы одинаковые то сравниваем фамилии
                if (p_ptr[j - 1].cl[0] == p_ptr[j].cl[0] && p_ptr[j - 1].cl[1] == p_ptr[j].cl[1] && p_ptr[j-1].cl[2] == p_ptr[j].cl[2] ) {
                    int f = 0;
                    bool b=0;
                    while (!b && p_ptr[j - 1].fam[f] != '\0' && p_ptr[j].fam[f] != '\0' && p_ptr[j - 1].fam[f] >= p_ptr[j].fam[f]) {
                        if (p_ptr[j - 1].fam[f] > p_ptr[j].fam[f]) {
                            pepl tmp = p_ptr[j];
                            p_ptr[j] = p_ptr[j - 1];
                            p_ptr[j - 1] = tmp;
                            b = 1;
                        }
                        f++;
                    }
                }
            }
            
        }
    }
    for (int i = 0; i < n; i++)
    {
        cout << p_ptr[i].cl << " " << p_ptr[i].fam << " " << p_ptr[i].name << " " << p_ptr[i].dob << "\n";
    }
    delete[] p_ptr;
}
    
Editor is loading...