Maxim_Leo

Untitled

May 6th, 2022
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. #include <vector>
  5. #include <iterator>
  6. #include <fstream>
  7. using namespace std;
  8.  
  9. vector< list<string>*> hash_table;
  10.  
  11. void hash_(string word) {
  12. int sum = 0;
  13. int num = 0;
  14. hash_table.resize(10);
  15. char numbers1[] = { '0','А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
  16. char numbers2[] = { '0','а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
  17.  
  18. for (int k = 0; k < word.size(); k++) {
  19. for (int m = 0; m < sizeof(numbers1); m++) {
  20. if (word[k] == numbers1[m]) {
  21. sum += m;
  22. num++;
  23. }
  24. }
  25. for (int t = 0; t < sizeof(numbers2); t++) {
  26. if (word[k] == numbers2[t]) {
  27. sum += t;
  28. num++;
  29. }
  30. }
  31.  
  32. }
  33. sum = sum % 10;
  34. if (hash_table[sum]->empty()) {
  35. hash_table[sum]->push_front(word);
  36.  
  37. ofstream fout("collisions.txt");
  38. fout << "Коллизии по хешу " << sum << " : " << endl<<word;
  39. }
  40. cout << "Слово " << num << " : " << sum << endl;
  41.  
  42. }
  43. int getHash(string word) {
  44. int sum = 0;
  45. int num = 0;
  46. char numbers1[] = { '0','А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
  47. char numbers2[] = { '0','а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
  48.  
  49. for (int k = 0; k < word.size(); k++) {
  50. for (int m = 0; m < sizeof(numbers1); m++) {
  51. if (word[k] == numbers1[m]) {
  52. sum += m;
  53. num++;
  54. }
  55. }
  56. for (int t = 0; t < sizeof(numbers2); t++) {
  57. if (word[k] == numbers2[t]) {
  58. sum += t;
  59. num++;
  60. }
  61. }
  62.  
  63. }
  64. sum = sum % 10;
  65. return sum;
  66. }
  67.  
  68. auto string_find(string word) {
  69. int num = getHash(word);
  70. return *hash_table[num]->begin();
  71. }
  72. int main()
  73. {
  74. setlocale(LC_ALL, "Russian");
  75. cout << "Задание 1: " << endl;
  76. for (size_t i = 0; i < hash_table.size(); i++)
  77. hash_table[i] = new list< string >(1);
  78.  
  79. vector<string> words = { "Ноутбук","Компьютер","Телефон","Планшет","Приставка","Умные часы","Наушники" };
  80. //hash1(words, 7, listwords);
  81. for (int i = 0; i < 7; i++) {
  82. hash_(words[i]);
  83. }
  84.  
  85. cout<<string_find(words[3]);
  86. cout << endl << "Задание 2: " << endl;
  87.  
  88. return 0;
  89. }
  90.  
  91.  
  92.  
  93.  
  94. /*
  95. void hash1(vector<string> word, int n , list<int> listwords) {
  96. int sum = 0;
  97. int num=0;
  98. list<int>::iterator it = listwords.begin();
  99. char numbers1[] = { '0','А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
  100. char numbers2[] = { '0','а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
  101. for (int i = 0; i < n; i++) {
  102. for (int k = 0; k < word.size(); k++) {
  103. for (int m = 0; m < sizeof(numbers1); m++) {
  104. if ((word[i])[k] == numbers1[m]) {
  105. sum += m;
  106. num ++;
  107. }
  108. }
  109. for (int t = 0; t < sizeof(numbers2); t++) {
  110. if ((word[i])[k] == numbers2[t]) {
  111. sum += t;
  112. num++;
  113. }
  114. }
  115.  
  116. }
  117. sum = sum % 10;
  118. listwords.insert(it, sum);
  119. it++;
  120. cout << "Слово " << num << " : " << sum << endl;
  121. sum = 0;
  122. }
  123. }
  124. */
Advertisement
Add Comment
Please, Sign In to add comment