У меня есть программа, которая должна принимать Dictionary.txt, который содержит 200 отдельных строк, по одной строке на строку, и хэшировать каждую строку в массив. Затем я беру введенную пользователем строку и пытаюсь найти эту строку в моем недавно заполненном массиве. Программа использует хеш-функцию по модулю для получения индекса массива для каждой строки и должна читать файл .txt построчно. На данный момент программа выполняется без ошибок, но массив полностью пуст после попытки чтения в строках.
Я пробовал использовать функцию getline, а также file >> input.
РЕДАКТИРОВАТЬ : мой файл не открывался правильно, поэтому я заменил URL-адрес в моем методе file.open () на C: / прямой URL вместо использованиятот, который я включил в свой проект Visual Studio.
int wordFinder(fstream& file, string word) {
string Table[200];
for (int i = 0; i < 200; i++) {
//modulo hashing using size of array
int index = i % 200;
//collision
if (!(Table[index].empty())) {
int count = 0;
do {
index = (index + 1) % 200;
count++;
} while ((!(Table[index].empty())) && (count < 200));//while the current position is occupied and count is less than the size of the array
getline(file, Table[index], '\n');//take string from file and put it into the table array
cout << "Collision " << Table[index]<< endl;
}
//no collision
else {
cout << "No Collision " << Table[index]<<index<< endl;
getline(file, Table[index], '\n');//take string from file and put it into the table array
}
}
//find string if in array
for (int i = 0; i < 200; i++) {
if (Table[i].compare(word) == 0) {
return 1;
}
}
//print table values
for (int i = 0; i < 200; i++) {
cout << Table[i] << endl;
}
return 0;
}
Ожидаемый результат - программа вернет 1, если слово найдено, или 0, если не найдено. Следует также распечатать массив значений, каждый индекс имеет отдельное слово из файла .txt. На данный момент программа всегда возвращает 0, потому что массив заканчивается полностью пустым, и поэтому программа выводит кучу пробелов.