SHARE
TWEET

Untitled

a guest May 15th, 2019 61 in 21 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include<vector>
  4.  
  5. using namespace std;
  6.  
  7. #define dlugosc 10000
  8.  
  9.  
  10. int hashCode(string key)//ktory indeks jest przyporzadkowany do danego słowa
  11. {
  12.     int index = 0, place = 0;
  13.  
  14.     for (unsigned i = 0; i < key.length(); i++)//sumuje skonwersowane na inty litery w słowie
  15.     {
  16.         place += static_cast <int> (key.at(i));
  17.     }
  18.  
  19.     index = place % dlugosc;//zeby wybrać miejsce w tablicy
  20.  
  21.     return index;
  22. }
  23.  
  24.  
  25. struct Hash_stucture {
  26.     Hash_stucture *wskaznik = NULL;
  27.     string key = "";
  28.     int value = 0;
  29. };
  30.  
  31.  
  32. int main()
  33. {
  34.     string slowo;
  35.     Hash_stucture tablica[dlugosc];
  36.     int index = 0;
  37.  
  38.     do
  39.     {
  40.         cin >> slowo;
  41.  
  42.         switch (slowo[0]) {
  43.  
  44.             case '?':
  45.  
  46.                 slowo.erase(slowo.begin());//usuwa znak '?' z przodu
  47.                 index = hashCode(slowo);
  48.  
  49.                 if (tablica[index].key == slowo)//jezeli znalezlismy słowo
  50.                 {
  51.                     cout << tablica[index].value << endl;
  52.  
  53.                 }
  54.                 else {
  55.  
  56.                     Hash_stucture * copy = tablica[index].wskaznik;
  57.                     do
  58.                     {  
  59.                         if (copy == NULL)
  60.                         {
  61.                             break;
  62.                         }
  63.                         if (copy->key == slowo)
  64.                         {
  65.                             cout << copy->value << endl;
  66.                             break;
  67.                         }
  68.                         else //kiedy w dalszej części łańcucha coś się znajduje
  69.                         {
  70.                             copy = copy->wskaznik;
  71.                         }
  72.                        
  73.  
  74.                     } while (1);
  75.                 }
  76.  
  77.  
  78.                 break;
  79.  
  80.             case'-':
  81.  
  82.                 slowo.erase(slowo.begin());//usuwa znak '-' z przodu
  83.                 index = hashCode(slowo);
  84.  
  85.                 if (tablica[index].key == slowo)
  86.                 {
  87.                     tablica[index].value = 0;
  88.                 }
  89.                 else {
  90.  
  91.                     Hash_stucture * copy = tablica[index].wskaznik;
  92.                     do
  93.                     {
  94.                         if (copy == NULL)
  95.                         {
  96.                             break;
  97.                         }
  98.                         if (copy->key == slowo)
  99.                         {
  100.                             copy->value = 0;
  101.                             break;
  102.                         }
  103.                         else//kiedy w dalszej części łańcucha coś się znajduje
  104.                         {
  105.                             copy = copy->wskaznik;
  106.                         }
  107.  
  108.                     } while (true);
  109.                 }
  110.  
  111.                 break;
  112.  
  113.             default:
  114.  
  115.                 index = hashCode(slowo);
  116.  
  117.                 if (tablica[index].key[0] == '\0')//jezeli nie ma jeszcze zadnego slowa w tablicy w podanym miejscu
  118.                 {
  119.                     tablica[index].key = slowo;
  120.                     tablica[index].value++;
  121.                 }
  122.                 else if (tablica[index].key == slowo)
  123.                 {
  124.                     tablica[index].value++;
  125.                 }
  126.                 else//jezeli to nie jest to słowo
  127.                 {
  128.                     if (tablica[index].wskaznik == NULL)//jeżeli nie ma pierwszego pierścienie łańcucha
  129.                     {
  130.                         Hash_stucture * kolejny = new Hash_stucture();
  131.                         tablica[index].wskaznik = kolejny;
  132.                         kolejny->key = slowo;
  133.                         kolejny->value++;
  134.                     }
  135.                     else
  136.                     {
  137.                         Hash_stucture *copy = tablica[index].wskaznik;//zapisuje na co wskazuje dalej ciąg łańcucha
  138.                         Hash_stucture *poprzednik = NULL;
  139.  
  140.                         do
  141.                         {
  142.                             if (copy == NULL)
  143.                             {
  144.                                 Hash_stucture * ptr = new Hash_stucture();
  145.                                 poprzednik->wskaznik = ptr;
  146.                                 ptr->key = slowo;
  147.                                 ptr->value++;
  148.                                 break;
  149.                             }
  150.                             else if (copy->key == slowo)
  151.                             {
  152.                                 copy->value++;
  153.                                 break;
  154.                             }
  155.  
  156.                             if (copy != NULL)//jezeli lancuch sie tutaj nie konczy
  157.                             {
  158.                                 poprzednik = copy;//przesuwamy o jeden do pzodu
  159.                                 copy = copy->wskaznik;
  160.                             }
  161.  
  162.                         } while (1);
  163.  
  164.                     }
  165.  
  166.                     break;
  167.                 }
  168.         }
  169.     } while (slowo != "q");
  170.  
  171.  
  172.     //system("pause");
  173.     return 0;
  174. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top