首页 > 解决方案 > 从文件读取到向量

问题描述

我正在从文件中读取以下数据。我需要实现的是最后用具有 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;
        }

标签: c++fileclassvectorstdmap

解决方案


这是我认为我在构造函数上取得的一些进步。通过断点查看,酒店收到了它的信息,也就是名字、星级和床位,但游客没有。有小费吗?
CHotel(字符串 s){

    CTurist b("",0);
    bool first = true;

    istringstream TList(s);

    string Days;
    int i = 0;
    string ime;
    string godini;

    if (first == true)
    {

    while (getline(TList, s, ' '))
    {
        switch (i)
        {
        case 0: this->hName = s; break;
        case 1:this->stars = stoi(s); break;
        case 2:this->beds = stoi(s); break;

        }
        i++;
        if (i == 3)break;

    }
    first = false;
    i = 0;
}
    while (getline(TList, s, '|'))
    {
        switch (i)
        {

        case 0: ime = s; break;
        case 1: godini = s; break;
        case 2: Days = s; break;


        }
        i++;
        if (i == 3)
        {
            CTurist T1("ime", stoi(Days));
            //Turisti.insert(pair<CTurist,unsigned>("ime", stoi(Days))); 


                i = 0;
            }
        }
    }

如何将T1插入mapTuristi???


推荐阅读