Я работаю над программой, которая требует от меня создать хеш-таблицу из содержимого файла. Файл содержит записи (по одной строке), содержащие ключ (int), имя (строка), код (int) и стоимость (double). У меня есть код, написанный для большей части программы для создания хеш-таблицы, однако у меня есть некоторые проблемы с выяснением того, как я должен загрузить таблицу из файла. В частности, как хранить каждую часть записи в соответствующей переменной?
Код довольно длинный, но если вы думаете, что публикация это поможет ответить на мой вопрос, дайте мне знать, и я буду рад включить его.
Я чувствую, что должен включить это, хотя у меня есть структура, предназначенная для хранения информации, содержащейся в каждой записи, которую я установил следующим образом:
struct record {
int key;
string name;
int code;
double cost;
}
Если вам нужно увидеть какие-либо другие фрагменты кода или код в целом, дайте мне знать.
Если файл данных имеет отдельные элементы, разделенные пробелами, то вы можете использовать, например, следующий код:
#include <iostream>
#include <fstream>
using namespace std;
typedef struct record {
int key;
string name;
int code;
double cost;
} rec;
int main()
{
ifstream f ("data.txt");
rec r;
f >> r.key;
while (!f.eof())
{
f >> r.name;
f >> r.code;
f >> r.cost;
cout << "new record, key=" << r.key
<< ", name=" << r.name
<< ", code=" << r.code
<< ", cost=" << r.cost << "\n";
f >> r.key;
}
//will also be done by destructor: f.close();
return 0;
}
Вы можете попробовать следующее:
while(_fstream >> key && _fstream >> name && _fstream >> code && _fstream >> cost)
{
record r;
r.key = key;
r.name = name; // and so on
// now you may do whatever you want to with your r object
}
_fstream
- ваш открытый поток файлов для ввода.
Как отметил @Red Alert, это будет более элегантное решение:
while(_fstream >> key >> name >> code >> cost)
Поскольку _fstream >> key
возвращает сам _fstream
;
while(_fstream >> key >> name >> code >> cost)