【发布时间】:2018-05-01 19:33:54
【问题描述】:
我正在读取包含以下数据的文件。我需要实现的是最后用具有 CTurist 对象的 CHotel 对象填充向量 m_hoteli。第 2-5 行是有变量的酒店,在大数字(500,400,300,600)之后,就是每个酒店的游客。
当我运行它时,我的向量会填充来自文件的信息,但会将有关游客的详细信息填充为酒店数据,因此我无法在输入和 CTurist 之间建立正确的连接。
玛丽娜 5 500 乔 21 1 蒂绍 20 6 维多利亚 31 20
郁金香 4 400 莎拉 41 17 罗西莎 49 14 瓦莱里娅 24 2
黑海 3 300 约翰 35 12 乔恩 35 11 詹尼 28 6
瑞士贝尔 5 600 欧林 26 1 玛格丽塔 27 2 朱丽叶 31
class CComplex:CHotel
{
protected:
string m_complex;
vector<CHotel> m_hoteli;
public:
CComplex(){};
CComplex(string filename, string nComplex)
{
string str;
m_complex = nComplex;
fstream file(filename, ios::in);
if (file.is_open())
{
CHotel temp(" ", 0, 0);
while (file >> temp)
{
m_hoteli.push_back(temp);
}
file.close();
}
else
throw "ERROR! ";
}
CHotel(String stringname) 构造函数:
class CHotel : public CTurist //втори клас, наследник на CTurist
{
protected:
string hName; //име хотел
int stars; //звезди на хотела
int beds; //брой легла
public:
map<CTurist, unsigned> Turisti;
unsigned Sum = 0;
int br = 0;
CHotel(){};
CHotel(string s)
{
map<CTurist, unsigned> TR;
bool first = true;
istringstream TList(s);
int i = 0;
while (getline(TList, s, ' '))
{
switch (i)
{
case 0: this->setName(s); break;
case 1: this->setAge(stoi(s)); break;
}
if (i ==2 )
{
if (!first){ setName(getName()); setAge(getAge()); first = true; }
else{ TR[CTurist("", 0)]; }
i = -1;
}
i++;
}
Turisti = TR;
}
【问题讨论】:
-
是的,文件已打开。不过,我会检查一下,注意。我的问题是,当我阅读文件时,我不知道如何访问 CTurist 及其输入运算符,因此在我的向量中,我将 Tourists 写为酒店。
-
时髦。所以问题是你没有很好的方法让解析器从酒店告诉游客?如果我没看错,您想
getline整行,然后拆分该行。上线的前几个代币是酒店,其余的是住在酒店的人,是吗? -
@user4581301 没错。我已经发布了一个我已经更新的新代码,我认为它接近正确,但仍然给我带来了一些麻烦。如果你能看一看,那就太好了。
标签: c++ file class vector stdmap