Линейное зондирование(один шаг вниз)
Мой вопрос таков:
Откройте файл в главном меню. В вашем файле есть одно слово в каждой строке. Я должен прочитать файл, суммирующий значения ascii каждого слова, сумма размера хэша будет моим ключом, и я должен позаботиться о столкновениях с линейным зондированием. для линейного зондирования мне нужно создать класс линейного зондирования. У меня есть два вопроса:
а) я не понимаю этого сообщения об ошибке.
"неопределенная ссылка на' LinearProbing:: HashFunction(std:: string, int, int)"
Я не понимаю, почему он так говорит.
б)правильно ли я сделал метод вставки? Моя логика заключается в том, что если место данного ключа пусто, вставьте слово в этот ключ или индекс. Если не пусто, спуститесь на одну ступеньку вниз и вставьте туда слово.
Любой вклад в этот вопрос очень помог бы мне!! и пожалуйста, никаких саркастических замечаний! Спасибо!!!
Что я уже пробовал:
#include <iostream> #include <fstream> #include <sstream> using namespace std; //Global variables int HASHSIZE=100; string HashTable[100]; class LinearProbing{ int HashFunction(string,int,int); void InsertWord(string); int SearchWord(string); }; int main(){ string word; string line; fstream file; int index; //User Input cout<<"Enter a word you would like to search: "; cin>>word; //Reading File file.open("text.txt"); while(file){ //http://www.cplusplus.com/forum/beginner/146982/ getline(file,line); } file.close(); } int HashFunction(string key, int index,int HASHSIZE){ int sum=0; for(int i=0;i<index;i++){ sum=sum+key[i]; } return sum%HASHSIZE; } void LinearProbing::InsertWord(string word){ int key= LinearProbing::HashFunction(word,word.length(),HASHSIZE); for (int i = 0; i < HASHSIZE; i++){ if (HashTable[key].empty()==true){//if the spot is empty, fill the space with the word HashTable[key] = word; return; } else{ HashTable[key+1] = word; } } } int LinearProbing::SearchWord(string word){ int key=LinearProbing::HashFunction(word,word.length(),HASHSIZE); for (int i = 0; i < HASHSIZE; i++){ if (HashTable[(key + i)%HASHSIZE] == word){ cout<<"The word you're looking for is in "<<key+i<<"position"; } } cout << "Value not contained in table"; return 0; }
[no name]
Это означает, что он не может найти функцию, потому что вы пропустили LinearProbing:: при реализации функции.
PinkPrint
Но я использовал LinearProbing:: в обоих случаях, когда мне нужно было вызвать хэш-функцию??
void LinearProbing:: InsertWord(строковое слово){
int key= LinearProbing:: HashFunction(word, word.length(),HASHSIZE);
int LinearProbing:: SearchWord(строковое слово){
int key=LinearProbing:: HashFunction(word, word.length(),HASHSIZE);
jeron1
Вроде не политически правильно сказал,
от
int HashFunction(string key, int index,int HASHSIZE){...
к
int LinearProbing::HashFunction(string key, int index,int HASHSIZE){...
а вы пробовали?
PinkPrint
О, теперь я понимаю. Большое спасибо!!