#c #search #hash #g
#c #Поиск #хэш #g
Вопрос:
Я пытаюсь написать хэш-таблицу для класса, и, похоже, у меня не получается выполнить это во время работы цикла. Ребята, вы видите в этом что-то неправильное? Цикл while завершается преждевременно, я думаю, что что-то не так с моим условием цикла while?
void search(store t[], string s, int num, int table_size)
{
int temp = num;
bool exit = false;
while(t[temp].data != s amp;amp; !exit){
temp ;
if (temp == table_size){
cout<<"reached 0 inside while loop"<<endl;
temp = 0;
}
if (temp == num){
cout<<"test search loop"<<endl; //I can't seem to get into here.
exit = true;
}
}
if(t[num].data == s)
cout<<"("<<s<<")"<<" appears "<<t[num].count<<" times."<<endl;
else
cout<<"your string is not in my table"<<endl;
}
Комментарии:
1. Пожалуйста, приведите пример использования. Как вы вызываете эту функцию? Какие значения вы передаете для num, table_size?
Ответ №1:
Ваш цикл while, похоже, в порядке,
но вы уверены насчет следующей строки?
if(t[num].data == s)
cout<<"("<<s<<")"<<" appears "<<t[num].count<<" times."<<endl;
разве вместо этого не должно быть следующего?
if(t[temp].data == s)
cout<<"("<<s<<")"<<" appears "<<t[temp].count<<" times."<<endl;
Потому что, очевидно, вы запускаете всю таблицу до завершения цикла или пока не найдете подходящую [ т.Е. while( t [temp].data != s …) ]. Поэтому я предполагаю, что вы ищете хороший индекс temp, но вы не используете его после цикла while.
Ответ №2:
Попробуйте изменить
int temp = num;
Для
int temp = 0;