Поиск в справочной хэш-таблице!

#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;