Advertisement
MagnusArias

PO1 | Tablica asocjacyjna

Jan 21st, 2016
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.96 KB | None | 0 0
  1. // ---------------------------------------------------------------------HEADER
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class assoc // to rozroznia duze i male litery
  8. {
  9.  
  10. protected:
  11.     struct node
  12.     {
  13.         node *next;
  14.         string key;
  15.         int value;
  16.         node(string newkey);
  17.     };
  18.    
  19.     node *head;
  20.     void clear();
  21.     void insert(string newkey, int newvalue);               // wprowadzenie wartosci do klucza
  22.     virtual bool cmp(const string s1, const string s2) const;       // porownanie dwoch kluczy
  23.     node *find(string newkey) const;                    // wyszukiwanie aktualnego klucza
  24.     void swap(assoc &l);                        //
  25.    
  26. public:
  27.    
  28.     assoc();
  29.     assoc(const assoc & l);
  30.     ~assoc();
  31.     assoc& operator=(const assoc & l);
  32.     int & operator[](string newkey);
  33. };
  34.  
  35. class assocbez : public assoc // a to nie rozroznia wielkosci liter
  36. {
  37.     public:
  38.     bool cmp(const string s1, const string s2) const;
  39. };
  40.  
  41.  
  42.  
  43.  
  44. // -------------------------------------------------------------------------------------CPP
  45. #include <string>
  46. #include <iostream>
  47. #include <cstdlib>
  48. #include "assoc.h"
  49.  
  50. using namespace std;
  51.  
  52.  
  53. assoc::assoc ()
  54. {
  55.     head = NULL;
  56. }
  57.  
  58. assoc::assoc (const assoc & l)
  59. {
  60.     node *src, **dst;
  61.     head = NULL;
  62.     src = l.head;
  63.     dst = &head;
  64.     while (src)
  65.     {
  66.         *dst = new node (*src);
  67.         src = src->next;
  68.         dst = &((*dst)->next);
  69.     }
  70. }
  71. assoc::~assoc ()
  72. {
  73.     clear();
  74. }
  75.  
  76. void assoc::clear ()        // usuwanie klucza
  77. {
  78.     while (head)
  79.     {
  80.         node *t = head->next;
  81.         delete head;
  82.         head = t;
  83.     }
  84. }
  85.  
  86. void assoc::insert (string newkey, int newvalue)    // wprowadzanie wartosci do klucza
  87. {
  88.     node *nowy = new node (newkey);
  89.     nowy->next = head;
  90.     nowy->value = newvalue;
  91.     head=nowy;
  92. }
  93.  
  94. void assoc::swap (assoc & l)
  95. {
  96.     node *t = head;
  97.     head = l.head;
  98.     l.head = t;
  99. }
  100.  
  101. assoc::  node* assoc:: find (string newkey) const   // wyszukiwanie klucza
  102. {
  103.     node* t= head;
  104.     while(t)
  105.     {
  106.         if (cmp(t->key,newkey)) return t;
  107.         t=t->next;
  108.     }
  109.     return NULL;
  110.    
  111. }
  112.  
  113. assoc:: node::node(string newkey): next(NULL)       // nowy element "listy"
  114. {
  115.     key=newkey;
  116. }
  117.  
  118. assoc & assoc::operator= (const assoc & l)      // przypisanie do elementu
  119. {
  120.     if (&l == this) return *this;
  121.     assoc t (l);
  122.     swap (t);
  123.     return *this;
  124. }
  125.  
  126.  
  127. int & assoc::operator[] (string newkey) // przeciazenie operatora [], czyli indeksowanie nowym kluczem
  128. {
  129.     node *c = find (newkey);
  130.     if (!c)
  131.     {
  132.         insert (newkey, 0);
  133.         c = head;
  134.     };
  135.     return c->value;
  136. }
  137.  
  138.  
  139. bool assoc::cmp (const string s1, const string s2) const    // porownywanie
  140. {
  141.     return(s1==s2);
  142. }
  143.  
  144.  
  145. bool assocbez::cmp(const string s1, const string s2) const
  146. {
  147.     string s_1, s_2;
  148.    
  149.     for (int i = 0; s1[i]; i++)     s_1[i] = tolower(s1[i]);
  150.     for (int i = 0; s2[i]; i++)     s_2[i] = tolower(s2[i]);
  151.    
  152.     return(s_1==s_2);
  153. }
  154.  
  155.  
  156.  
  157. // ----------------------------------------------------------------------------------------------MAIN
  158. #include <iostream>
  159. #include <string>
  160. #include <cstdlib>
  161. #include "assoc.h"
  162. using namespace std;
  163.  
  164. //indeksowanie tablic z uzyciem wlasnych danych, np lancuchów tekstu, cos jak etykieta
  165. int main()
  166. {
  167.     assoc ZeZnakami;
  168.     assocbez BezZnakow;
  169.    
  170.     ZeZnakami["ala"]=14;
  171.     cout << "pierwsza wartosc klucza = " << ZeZnakami["ala"] << endl;
  172.    
  173.     ZeZnakami["ala"]=16;
  174.     cout << "wartosc z nowa wartoscia = " << ZeZnakami["ala"] << endl;
  175.    
  176.     ZeZnakami["AlA"] = 14;
  177.     cout << "wartosc z nowa wartoscia = " << ZeZnakami["ala"] << endl;
  178.     cout << "stara wartosc z duzym literami = " << ZeZnakami["AlA"] << endl;
  179.    
  180.    
  181.    
  182.     BezZnakow["cztery"]=44;    
  183.     cout << "[cztery] = " << BezZnakow["cztery"] << endl;
  184.     BezZnakow["CztErY"]=4; // przyjmuje kolejna wpisana wartosc bez sprawdzania wielkosci liter
  185.     cout << "[CztErY] = "   << BezZnakow["czterys"] << endl;
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement