Advertisement
avr39ripe

cppPersonStructSort

Jun 8th, 2021
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. struct Person
  4. {
  5.     uint16_t id;
  6.     char* fname;
  7.     char* sname;
  8. };
  9.  
  10. void personInit(Person& person, uint16_t id, const char* fname, const char* sname)
  11. {
  12.     person.id = id;
  13.     int strLen{ (int)strlen(fname) + 1 };
  14.     person.fname = new char[strLen];
  15.     strcpy_s(person.fname, strLen, fname);
  16.     strLen = strlen(sname) + 1;
  17.     person.sname = new char[strLen];
  18.     strcpy_s(person.sname, strLen, sname);
  19. }
  20.  
  21. void personClean(Person& person)
  22. {
  23.     delete[] person.fname;
  24.     delete[] person.sname;
  25. }
  26.  
  27. void personPrint(const Person& person, bool fnameFirst = true)
  28. {
  29.     std::cout << person.id << ". ";
  30.     if (fnameFirst)
  31.     {
  32.         std::cout << person.fname << ' ' << person.sname << '\n';
  33.     }
  34.     else
  35.     {
  36.         std::cout << person.sname << ' ' << person.fname << '\n';
  37.     }
  38.    
  39. }
  40.  
  41. void personsSort(Person* persons, int size, bool(*criteria)(const Person&, const Person&))
  42. {
  43.     Person tmp;
  44.     for (int head{ 0 }; head < size; ++head)
  45.     {
  46.         for (int tail{ size - 1 }; tail > head; --tail)
  47.         {
  48.             if (criteria(persons[tail],persons[head]))
  49.             {
  50.                 tmp = persons[tail];
  51.                 persons[tail] = persons[head];
  52.                 persons[head] = tmp;
  53.             }
  54.         }
  55.     }
  56. }
  57.  
  58.  
  59. bool personByFName(const Person& personA, const Person& personB)
  60. {
  61.     return (strcmp(personA.fname, personB.fname) < 0);
  62. }
  63.  
  64. bool personBySName(const Person& personA, const Person& personB)
  65. {
  66.     return (strcmp(personA.sname, personB.sname) < 0);
  67. }
  68.  
  69.  
  70. bool personById(const Person& personA, const Person& personB)
  71. {
  72.     return personA.id < personB.id;
  73. }
  74.  
  75. int main()
  76. {
  77.     const int personsSize{ 3 };
  78.     Person persons[personsSize];
  79.  
  80.     personInit(persons[0], 1, "Petr", "Ivanov");
  81.     personInit(persons[1], 2, "Ivan", "Sidorov");
  82.     personInit(persons[2], 3, "Sidor", "Petrov");
  83.  
  84.     std::cout << "Original\n";
  85.     for (int i{ 0 }; i < personsSize; ++i)
  86.     {
  87.         personPrint(persons[i]);
  88.     }
  89.    
  90.     personsSort(persons, personsSize, personByFName);
  91.  
  92.     std::cout << "\nSorted by First Name\n";
  93.     for (int i{ 0 }; i < personsSize; ++i)
  94.     {
  95.         personPrint(persons[i]);
  96.     }
  97.  
  98.     personsSort(persons, personsSize, personBySName);
  99.  
  100.     std::cout << "\nSorted by Second Name\n";
  101.     for (int i{ 0 }; i < personsSize; ++i)
  102.     {
  103.         personPrint(persons[i]);
  104.     }
  105.  
  106.     personsSort(persons, personsSize, personById);
  107.  
  108.     std::cout << "\nSorted by ID\n";
  109.     for (int i{ 0 }; i < personsSize; ++i)
  110.     {
  111.         personPrint(persons[i]);
  112.     }
  113.  
  114.     std::cout << "\nCleaning...\n";
  115.     for (int i{ 0 }; i < personsSize; ++i)
  116.     {
  117.         personClean(persons[i]);
  118.     }
  119.  
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement