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 personInit(Person& person, uint16_t id, const char* fname, const char* sname)
- {
- person.id = id;
- int strLen{ (int)strlen(fname) + 1 };
- person.fname = new char[strLen];
- strcpy_s(person.fname, strLen, fname);
- strLen = strlen(sname) + 1;
- person.sname = new char[strLen];
- strcpy_s(person.sname, strLen, sname);
- }
- void personClean(Person& person)
- {
- delete[] person.fname;
- delete[] person.sname;
- }
- void personPrint(const Person& person, bool fnameFirst = true)
- {
- std::cout << person.id << ". ";
- if (fnameFirst)
- {
- std::cout << person.fname << ' ' << person.sname << '\n';
- }
- else
- {
- std::cout << person.sname << ' ' << person.fname << '\n';
- }
- }
- void personsSort(Person* persons, int size, bool(*criteria)(const Person&, const Person&))
- {
- Person tmp;
- for (int head{ 0 }; head < size; ++head)
- {
- for (int tail{ size - 1 }; tail > head; --tail)
- {
- if (criteria(persons[tail],persons[head]))
- {
- tmp = persons[tail];
- persons[tail] = persons[head];
- persons[head] = tmp;
- }
- }
- }
- }
- bool personByFName(const Person& personA, const Person& personB)
- {
- return (strcmp(personA.fname, personB.fname) < 0);
- }
- bool personBySName(const Person& personA, const Person& personB)
- {
- return (strcmp(personA.sname, personB.sname) < 0);
- }
- bool personById(const Person& personA, const Person& personB)
- {
- return personA.id < personB.id;
- }
- int main()
- {
- const int personsSize{ 3 };
- Person persons[personsSize];
- personInit(persons[0], 1, "Petr", "Ivanov");
- personInit(persons[1], 2, "Ivan", "Sidorov");
- personInit(persons[2], 3, "Sidor", "Petrov");
- std::cout << "Original\n";
- for (int i{ 0 }; i < personsSize; ++i)
- {
- personPrint(persons[i]);
- }
- personsSort(persons, personsSize, personByFName);
- std::cout << "\nSorted by First Name\n";
- for (int i{ 0 }; i < personsSize; ++i)
- {
- personPrint(persons[i]);
- }
- personsSort(persons, personsSize, personBySName);
- std::cout << "\nSorted by Second Name\n";
- for (int i{ 0 }; i < personsSize; ++i)
- {
- personPrint(persons[i]);
- }
- personsSort(persons, personsSize, personById);
- std::cout << "\nSorted by ID\n";
- for (int i{ 0 }; i < personsSize; ++i)
- {
- personPrint(persons[i]);
- }
- std::cout << "\nCleaning...\n";
- for (int i{ 0 }; i < personsSize; ++i)
- {
- personClean(persons[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement