Untitled
unknown
plain_text
3 years ago
5.0 kB
9
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...