如何在C++中从文件读取到构造函数

How to read from a file to constructor in C++?

本文关键字:文件 读取 构造函数 C++      更新时间:2023-10-16

我有一个 player.txt 文件,我需要在其中读取并将我的读数放入构造函数中,然后我将列出这些 TennisPlayer 对象。我被困在如何做到这一点。好吧,第一件事是我逐字或逐行从文件中阅读,但无法管理如何将我的读数放入构造函数中。我的构造函数有五个输入:

TennisPlayer(string firstName, tring lastName, int ranking, int totalPoints, string country) 

我的部分播放器.txt文件在这里:

Novak Djokovic 16790 Serbia
Andy Murray 8945 Great Britain

其次,如何把"英国"当作一根弦?

我真的是新C++,处于绝望的境地。谢谢大家的帮助。

从文件创建一个流,然后将其传递给这样的类。它将迭代文件,将值存储在向量中,然后在构造函数中初始化这些对象的向量。为了阅读这个国家,我们一直在阅读文字,直到我们找到行的尽头。因此,我假设每个网球运动员都在一行中指定。

请注意,这里没有错误检查,您可能希望添加

    class TennisPlayersList
    {
    public:
        struct TennisPlayer
        {
            std::string first_name;
            std::string second_name;
            int ranking;
            int total_points;
            std::string country;
        };
        TennisPlayersList(std::istream& filestream)
            :players(ReadPlayersFromFile(filestream))
        {}
    private:
        std::vector<TennisPlayer> players;
        static std::vector<TennisPlayer> ReadPlayersFromFile(std::istream& filestream)
        {
            std::vector<TennisPlayer> p;
            while (filestream.eof() == false)
            {
                p.push_back(ReadPlayer(filestream));
            }
            return p;
        }
        static TennisPlayer ReadPlayer(std::istream& filestream)
        {
            using namespace std;
            TennisPlayer player;
            std::string line;
            getline(filestream, line);
            std::stringstream ss(line);
            ss >> player.first_name;
            ss >> player.second_name;
            ss >> player.ranking;
            ss >> player.total_points;
            // country could be several words, keep appending until we have finished
            while (ss.good())
            {
                std::string country_part;
                ss >> country_part;
                if (player.country.empty())
                    player.country += country_part;
                else 
                    player.country += " " + country_part;
            }
            return player;
        }
    };

用这样的东西打电话

std::fstream players;
players.open("tennis_players.txt", std::ios::in);
TennisPlayersLists list(players);
players.close();