Advertisement
Toxotsist

Сиаод 2 (Грустная бэброчка, которую никто не нюхает)

Sep 25th, 2021 (edited)
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cctype>
  4. #include <string>
  5. #include <sstream>
  6.  
  7. using namespace std;
  8.  
  9. struct node
  10. {
  11.     string key;
  12.     string data;
  13.     bool closed;
  14.     node() {
  15.         closed = false; }
  16. };
  17.  
  18. class HT {
  19.     int max_size = 100;
  20.     node* data = new node[max_size];
  21. public:
  22.     HT() { nodeGetter(); }
  23.  
  24.     int hsh(string key) {
  25.         int value = 0;
  26.         for (int i = 0; i < size(key); i++) {
  27.             value += int(key[i]);
  28.         }
  29.         return abs(value % max_size);
  30.  
  31.     }
  32.  
  33.     void nodeGetter() {
  34.         node* tmp = new node();
  35.         string path = "C:/Users/Pavel/Desktop/table.txt";
  36.         ifstream aboba(path);
  37.         string output = "";
  38.         string output2 = "";
  39.         while (!aboba.eof()) { 
  40.             getline(aboba, output, '/');
  41.             getline(aboba, output2, '/');
  42.             tmp->key = output;
  43.             tmp->data = output2;
  44.             tmp->closed = true;
  45.             if (tmp->key != "") {
  46.                 add(tmp);
  47.             }
  48.            
  49.             output = "";
  50.             output2 = "";
  51.         }
  52.        
  53.     }
  54.  
  55.     void add(node* x) {
  56.         if (hsh(x->key) != max_size - 1) {
  57.             //if (&data[hsh(x->key)] == NULL) {
  58.                 //data[hsh(x->key)] = *x;  //data[hsh(x->key)].closed = true;
  59.             //} else
  60.             if (data[hsh(x->key)].key == x->key)
  61.             {
  62.                 data[hsh(x->key)] = *x; // data[hsh(x->key)].closed = true;
  63.             }
  64.             else
  65.                 if (!data[hsh(x->key)].closed) {
  66.                     data[hsh(x->key)] = *x; //data[hsh(x->key)].closed = true;
  67.                 }
  68.                 else {
  69.                     Coll(x, 1);
  70.                 }
  71.         }
  72.         else {
  73.             rere();
  74.             add(x);
  75.         }
  76.     }
  77.  
  78.     void rere() {
  79.         max_size += 1; node* tmp = new node[max_size];
  80.         node* data = new node[max_size];
  81.         for (int i = 0; i < max_size-1; i++) {
  82.             tmp[i].key = data[i].key;
  83.             tmp[i].data = data[i].data;
  84.             tmp[i].closed = data[i].closed;
  85.         }
  86.         for (int i = 0; i < max_size; i++) {
  87.             if (tmp[i].closed) {
  88.                 cout << "ХТО Я? " << "ПРАВИЛЬНО, " << tmp->key << endl;
  89.                 add(&tmp[i]);
  90.             }
  91.         }
  92.     }
  93.  
  94.     void Coll(node* x, int b) {
  95.         if ((hsh(x->key)+b) != max_size-1) {
  96.             //if (&data[hsh(x->key) + b] == NULL) {
  97.                
  98.                 //data[hsh(x->key) + b] = *x; //data[hsh(x->key) + b].closed = true;
  99.             //} else
  100.              if (data[hsh(x->key) + b].key == x->key + " ")
  101.             {
  102.                 data[hsh(x->key) + b] = *x; //data[hsh(x->key) + b].closed = true;
  103.             }
  104.             else if (!&data[hsh(x->key) + b].closed) {
  105.                 data[hsh(x->key) + b] = *x;  // data[hsh(x->key) + b].closed = true;
  106.             }
  107.             else { Coll(x, b + 1); }
  108.         }
  109.         else {
  110.             rere();
  111.             add(x);
  112.         }
  113.     }
  114.  
  115.     void print()
  116.     {
  117.         for (int i = 0; i < max_size; i++) {
  118.         if (data[i].closed){
  119.                 cout << data[i].key << " " << data[i].data << endl;
  120.             }
  121.         }
  122.     }
  123.  
  124.     node* find(string key) {
  125.         node* tmp = new node(); bool x = false;
  126.         string buffer;
  127.         string path = "C:/Users/Pavel/Desktop/table.txt";
  128.         ifstream aboba(path); string output2;
  129.         printf("\n~ Поиск ячейки...\n");
  130.         while (!aboba.eof()) {
  131.             getline(aboba, buffer, '/');
  132.             getline(aboba, output2, '/');
  133.             if (hsh(key + " ") == hsh(buffer)) {
  134.                 tmp->key = buffer;
  135.                 tmp->data = output2;
  136.                 x = true;
  137.                 break;
  138.             }
  139.             if (x == true) { break; }
  140.         }
  141.         return tmp;
  142.     }
  143.  
  144.     void delete_method(string key) {
  145.         node* tmp = new node();
  146.         tmp->key = key + " ";
  147.         tmp->closed = false;
  148.         add(tmp);
  149.         rere();
  150.     }
  151.  
  152. };
  153.  
  154. int main()
  155. {
  156.     setlocale(0, "");
  157.     HT t = HT();
  158.     node* test;
  159.     t.print();
  160.     test = t.find("001 Saratov");
  161.     cout  << test->key  << " " << test->data << endl;
  162.     //t.delete_method("001 Saratov");
  163.     cout << endl;
  164.     t.print();
  165.     return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement