Прежде всего позвольте мне сказать спасибо тем людям, которые публикуют здесь часто, я приобрел массу знаний, изучая этот сайт за последние несколько лет.C++ Создание объекта из текстового файла
Хорошо, этот вопрос был задан раньше, но у меня есть небольшой поворот, который я не могу получить.
Вот моя структура.
struct person
{
string Sex;
string Name;
string Match;
int phoneNumber;
int numInterests;
vector<string> interests;
};
Задача разработана как «Программа знакомств», которая соответствует людям противоположного пола с аналогичными интересами.
Вот пример текстового файла после этого формата:
«Секс» «Имя» «Номер телефона» «Количество интересов» «Список интересов» «Match (если совпадение найдено)»
M Tyler 1234567890 3 soccer football tv Jess
F Lyns 1234567890 3 hockey sex movies
F Jess 1234567890 3 soccer football tv Tyler
M Taylor 1234567890 3 hockey sex movies
В этом примере файл соответствует Jess и Tyler. Вот моя функция до сих пор ...
void LoadClients(std::ifstream &file,vector<person>& peps)
{
string sex,name,interests,line, match;
double phone,ni;
person p;
for(int i=0;i<maxPeople("Clients.mf"); i++){
file>>sex>>name>>phone>>ni;
p.Sex = sex;
p.Name = name;
p.phoneNumber = phone;
p.numInterests = ni;
for (int i=0; i<ni; i++){
file >> line;
p.interests.push_back(line);
}
file >> match;
p.Match = match;
peps.push_back(p);
// person p;
//istringstream iss(line);
}
};
Функция компилирует, но не правильно читать вообще. Вот остальная часть моей работы, в случае, если вы хотите увидеть его ...
int maxPeople(const char* file)///Just returns the number of lines in the file
{
ifstream inFile(file);
int c = count(istreambuf_iterator<char>(inFile),
istreambuf_iterator<char>(), '\n');
return c;
}
int main()
{
int numberOfClients=maxPeople("Clients.mf");
ifstream file("Clients.mf");
vector<person> peps;
LoadClients(file,peps);
return 0;
}
Моей функцию LoadClients был смоделирован после элегантного ответа я нашел здесь: Reading a string and integers
Все, что я прошу это как получить эту функцию, чтобы создать вектор или массив людей из текстового файла.
Заключительная программа будет иметь дополнительные функции «NewClient», «UnMatch», «PrintMatched» и «PrintSingles», но я думаю, что смогу их обработать. Любые советы приветствуются :)
Спасибо за чтение!
EDIT1: Использование этого формата.
void LoadClients(std::ifstream &file,vector<person>& peps)
{
person p;
string line;
while(getline(file, line))
{
istringstream iss(line);
iss >> p.Sex >> p.Name >> p.phoneNumber >> p.numInterests;
for(int i=0;i<p.numInterests;i++){
string interest;
iss >> interest;
p.interests.push_back(interest);
}
}
};
Я решил пропустить «матч» пока. Я получаю ошибку сегментации, когда я обращаюсь к объектам из основного.
ifstream file("Clients.mf");
vector<person> peps;
LoadClients(file,peps);
for(int i=0; i<numberOfClients;i++){
cout << peps[0].Name;
}
Спасибо всем, кто помог! – user5340194