Advertisement
avr39ripe

cppPersonStructWithMethods

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