如何在文件中读取/从文件读取地图[关闭]

问题描述 投票:1回答:1

我有map<string, Day> DaysDay是课程:

class Day 
{
    public:
        string date = "undefined";
        int aims = 0;
        vector <Task> tasks;
        void Search();
        friend ostream& operator<<(ostream& ost, const Day& d);
        friend istream& operator>>(istream& ist, Day& d);
        friend ifstream& operator>>(ifstream& in, Day& d);
        friend ofstream& operator <<(ofstream& out, const Day& d);
};

如何保存此地图?

在使用地图之前,代码正在使用矢量来保存数据:

string name; 
cout << "input file name "; 
cin >> name; 
ofstream Save(name);
if (!Save)continue; PrintForSaveDay(Save, d); 
Save.close();   
cout << "Saved,filename is :" << name << "\n"; break;

但现在我需要使用重载运算符而不是PrintForSaveDay函数。香港专业教育学院试图做到这一点,但它仍然无法正常工作...

cout << "Input file name ";
                string name;
                cin >> name;
                ofstream Save(name);
                if (!Save)
                    continue;
                Day d;
                Save << d;
                Save.close();

也关于从文件读取:

cout << "Write name file name to read  ";
            string file_name;
            cin >> file_name;
            ofstream fout(file_name);
            if (!fout)
                continue;
            for (auto& i : Days)
            {
                fout << i.second;
            };

            fout.close();
            temp = true;
            break;

我的操作员

ofstream& operator <<(ofstream& outfd, const Day& d)
{
    outfd << d.date << endl << d.aims;
    for (auto& t : d.tasks)
        outfd << t;
    return outfd;
}

ifstream& operator >>(ifstream& infd, Day& d)
{
    Task t;
    infd >> d.date >> d.aims;
    for (int i = 0; i < d.aims; i++)
    {
        infd >> t;
        d.tasks.push_back(t);
    }
    return infd;
}

任务描述

此项目是一天的日常计划。用户输入有关当天的目标数量和目标信息。应该能够获取,保留地图并保存/读取文件。如何使用此功能?

std::string Day::toString()
{
    std::string output;
    output += date;
    output += std::to_string(aims);
    for(std::vector::iterator it = tasks.begin(); it != tasks.end(); it++)
    {
        output += it->toString(); // Write a similar toString function for your 
                                  // Task class.
    }
    return output;
}

喜欢这样吗?string file_name; cin >> file_name; Day :: toString [file_name];

c++ dictionary stl ofstream istream
1个回答
0
投票

一种简单的解决方案是将std::string toString()void fromString(std::string)方法添加到Day类。您可以精确指定要存储的格式,并以相同的方式将其读回。例如,“字符串化的” Day对象可能看起来像:

date,aims,task1,task2,task3,task4\n

[当您读回它时,请使用getline(),将该行读入fromString(),并用逗号分隔数据,直到读取\n。自编写文件格式以来,您应该应该可以将其读回到Day数据结构中。

使用Day.toString()应产生易于写入文件的字符串。

toString()的示例:

std::string Day::toString()
{
    std::string output;
    output += date;
    output += std::to_string(aims);
    for(std::vector::iterator it = tasks.begin(); it != tasks.end(); it++)
    {
        output += it->toString(); // Write a similar toString function for your 
                                  // Task class.
    }
    return output;
}
© www.soinside.com 2019 - 2024. All rights reserved.