Advertisement
MeehoweCK

Untitled

Aug 23rd, 2018
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. string funkcja(rekord* &lista, string n, char jakisznak, unsigned& ileznakow)
  2. {
  3.     rekord* nowy = new rekord;          // alokacja pamięci na nowy rekord
  4.  
  5.     // przypisywanie wartości z funkcji do nowego rekordu:
  6.     nowy->liczba = n.size();
  7.     nowy->napis = n;
  8.     nowy->znak = n[0];
  9.     nowy->next = nullptr;
  10.  
  11.     ileznakow = 0;                      // pobieranie do zmiennej liczby wystąpień znaku "jakisznak"
  12.     if(nowy->znak == jakisznak)
  13.         ++ileznakow;
  14.  
  15.     unsigned licznik = 1;
  16.  
  17.     // jeżeli lista jest dotychczas pusta:
  18.     if(lista == nullptr)
  19.         lista = nowy;
  20.  
  21.     // jeżeli lista nie jest pusta (dopisywanie elementu na koniec)
  22.     else
  23.     {
  24.         ++licznik;
  25.         rekord* tmp = lista;                    // tworzenie zmiennej tymczasowej (aby nie nadpisywać listy)
  26.         if(tmp->znak == jakisznak)
  27.             ++ileznakow;
  28.  
  29.         // pętla szukająca końca listy
  30.         while(tmp->next)                        // dopóki istnieje następny element...
  31.         {
  32.             ++licznik;
  33.             tmp = tmp->next;                    // ... przejdź do niego
  34.             if(tmp->znak == jakisznak)
  35.                 ++ileznakow;
  36.         }
  37.         tmp->next = nowy;                       // dopisywanie na koniec listy nowo utworzonego elementu
  38.     }
  39.  
  40.     // druga część funkcji (usuwanie elementu) - wykonuje się tylko gdy liczba elementów jest co najmniej równa 2
  41.     if(licznik >= 2)
  42.     {
  43.         bool pf = lista->liczba > lista->next->liczba;      // zmienna przechowująca informację czy pierwszy element ma dłuższy napis niż drugi element
  44.  
  45.         string zwracany;                        // utworzenie zmiennej, która ma przechowywać dłuższy napis z dwóch pierwszych elementów (będzie on kasowany, więc musimy go gdzieś przechować)
  46.  
  47.         if(pf)                                  // jeżeli napis w pierwszym elemencie jest dłuższy...
  48.         {
  49.             zwracany = lista->napis;
  50.             lista = lista->next;                // nadpisanie na miejscu pierwszego elementu jego syna (w ten sposób pozbywamy się pierwszego elementu)
  51.         }
  52.  
  53.         // analogicznie jak wyżej:
  54.         else
  55.         {
  56.             zwracany = lista->next->napis;
  57.             lista->next = lista->next->next;
  58.         }
  59.         return zwracany;
  60.     }
  61.     return "";                                   // jeżeli lista posiada mniej niż dwa elementy, zwracamy pusty napis
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement