Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- struct Person
- {
- uint16_t id;
- char* fname;
- char* sname;
- void init(uint16_t idP, const char* fnameP, const char* snameP)
- {
- id = idP;
- auto strLen{ strlen(fnameP) + 1 };
- fname = new char[strLen];
- strcpy_s(fname, strLen, fnameP);
- strLen = strlen(snameP) + 1;
- sname = new char[strLen];
- strcpy_s(sname, strLen, snameP);
- }
- void print(bool fnameFirst = true)
- {
- std::cout << id << ". ";
- if (fnameFirst)
- {
- std::cout << fname << ' ' << sname << '\n';
- }
- else
- {
- std::cout << sname << ' ' << fname << '\n';
- }
- }
- void clean()
- {
- delete[] fname;
- delete[] sname;
- }
- };
- void personsSort(Person* persons, size_t personsSize, bool(*criteria)(const Person& personA, const Person& personB))
- {
- Person tmp;
- for (size_t head{ 0 }; head < personsSize; ++head)
- {
- for (size_t tail{ personsSize - 1 }; tail > head; --tail)
- {
- if (criteria(persons[tail],persons[head]))
- {
- tmp = persons[tail];
- persons[tail] = persons[head];
- persons[head] = tmp;
- }
- }
- }
- }
- bool personsByIdReverse(const Person& personA, const Person& personB)
- {
- return personA.id > personB.id;
- }
- bool personsByFName(const Person& personA, const Person& personB)
- {
- return strcmp(personA.fname, personB.fname) < 0;
- }
- bool personsBySName(const Person& personA, const Person& personB)
- {
- return strcmp(personA.sname, personB.sname) < 0;
- }
- int main()
- {
- const size_t personsSize{ 3 };
- Person persons[personsSize];
- persons[0].init(1, "Petr", "Ivanov");
- persons[1].init(2, "Ivan", "Sidorov");
- persons[2].init(3, "Sidor", "Petrov");
- std::cout << "\nOrogonal:\n";
- for (size_t i{ 0 }; i < personsSize; ++i)
- {
- persons[i].print();
- }
- personsSort(persons, personsSize, personsByIdReverse);
- std::cout << "\nSorted by Id:\n";
- for (size_t i{ 0 }; i < personsSize; ++i)
- {
- persons[i].print();
- }
- personsSort(persons, personsSize, personsByFName);
- std::cout << "\nSorted by First Name:\n";
- for (size_t i{ 0 }; i < personsSize; ++i)
- {
- persons[i].print();
- }
- personsSort(persons, personsSize, personsBySName);
- std::cout << "\nSorted by Second Name:\n";
- for (size_t i{ 0 }; i < personsSize; ++i)
- {
- persons[i].print();
- }
- std::cout << "\nCleaning...\n";
- for (size_t i{ 0 }; i < personsSize; ++i)
- {
- persons[i].clean();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement