27 / 27 / 11
Регистрация: 26.10.2012
Сообщений: 101
1

Хеш-таблицы: string subscript out of range

22.11.2012, 21:45. Показов 1443. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
 
typedef string nametype;
struct celltype 
{
  nametype element;
  celltype* next;
};
const int DICT_SIZE = 15;
typedef celltype* DICTIONARY[DICT_SIZE];
 
int Hash(nametype);
void PRINT(DICTIONARY);
bool MEMBER(nametype, DICTIONARY &);
void INSERT(nametype, DICTIONARY &);
void MAKENULL(DICTIONARY &);
void DELETE(nametype, DICTIONARY &);
 
int main()
{
  DICTIONARY D;
  string strings[DICT_SIZE] = {"Willis","DeNiro","Tarantino","AlPacino","Statham","Butler","Sandler","Portman","Cage","Hanks","Freeman","Banderos","Stalone","VanDam","Pitt"};
  MAKENULL(D);
  for (int i = 0; i < DICT_SIZE; i++) 
  {
    INSERT(strings[i], D);
  }
  PRINT(D);
  DELETE("Banderos", D);
  PRINT(D);
  return 0;
}
 
int Hash(nametype x)
{
  int sum = 0;
  for (unsigned int i = 0; i < sizeof(x); i++)
  {
    sum += (int) x[i];
  }
  return  sum % (DICT_SIZE);
}
 
void PRINT(DICTIONARY A)
{
  celltype* current;
  for (int i = 0; i < DICT_SIZE; i++) 
  {
    cout<<endl<<"["<<i<<"]";
    current = A[i];
    while (current != NULL) 
    {
      cout<<current->element<<" ";
      current = current->next;
    }
  }
  cout<<endl;
}
 
bool MEMBER(nametype x, DICTIONARY &A)
{
  celltype* current;
  current = A[Hash(x)];
  while (current != NULL) 
  {
    if (current->element == x)
      return true;
    else 
      current = current->next;
  }
  return false;
}
 
void INSERT(nametype x, DICTIONARY &A)
{
  int bucket;
  celltype* oldHeader;
  if (!MEMBER(x, A))
  {
    bucket = Hash(x);
    oldHeader = A[bucket];
    A[bucket] = new celltype;
    A[bucket]->element = x;
    A[bucket]->next = oldHeader;
  }
}
 
void MAKENULL(DICTIONARY &A)
{
  for (int i = 0; i < DICT_SIZE; i++) 
  {
    A[i] = NULL;
  }
}
 
void DELETE(nametype x, DICTIONARY &A)
{
  int bucket;
  celltype* current;
  bucket = Hash(x);
  if (A[bucket] != NULL)
  {
    if (A[bucket]->element == x) 
    {
      A[bucket] = A[bucket]->next;
    }
    else 
    {
      current = A[bucket];
      while (current->next != NULL) 
      {
        if (current->next->element == x) 
        {
          current->next = current->next->next;
          break;
        }
        else 
        {
          current = current->next;
        }
      }
    }
  }
}
Добавлено через 11 минут
Лаба по Хеш-таблицам

Добавлено через 28 минут
Ребят помогите
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2012, 21:45
Ответы с готовыми решениями:

String subscript out of range
Почитала на форуме, что данная ошибка появляется при выходе за границы массива. Задача - найти...

String subscript out of range
Здравствуйте! Выбивает ошибку &quot;string subscript out of range&quot;, хотя все предложение, которое...

String subscript out of range
#include &lt;SFML/Graphics.hpp&gt; #include &lt;sstream&gt; #include &lt;iostream&gt; using namespace sf; const...

String subscript out of range
При запуске выдает ошибку &quot;string subscript out of range&quot;. Подскажите, в чем проблема. #include...

2
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
22.11.2012, 23:40 2
Функция Hash
C++
1
2
3
4
  for (unsigned int i = 0; i < sizeof(x); i++)
  {
    sum += (int) x[i];
  }
Ошибка происходит здесь при x[7]
Поменял на
C++
1
2
3
4
  for (unsigned int i = 0; i < x.size(); i++)
  {
    sum += (int) x[i];
  }
Все норм. Ибо, sizeof(x) - это не размер массива, а размер структуры
1
27 / 27 / 11
Регистрация: 26.10.2012
Сообщений: 101
23.11.2012, 00:10  [ТС] 3
спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2012, 00:10
Помогаю со студенческими работами здесь

String subscript out of range
Разбираю пример, который дала препод в примерах к лекциям..Пример по коду Виженера.. Пару раз...

Ошибка string subscript out of range
Здраствуйте создал библиотеку, при подключение библиотеки и запуска программи все работает...

Ошибка string subscript out of range
Нужно заменить символ 'w' на 'v'. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Ошибка: string subscript out of range
Задача: Расстоянием Хэмминга двух строк a и b одинаковой длины называется количество позиций, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru