繁体   English   中英

从文本文件C ++读取多种变量类型

[英]Reading multiple variable types from text file C++

我正在尝试从看起来像这样的文本文件中读取

bend 6 7
fairbanks 3 5

并逐行重复。 内容总是相同的格式,所以先是字符串,然后是int,然后是int。

我正在尝试使用stringstream来获取文件的每一行,然后从那里分离出来。 但是,它似乎根本没有读取任何内容。 这是我目前的尝试:

ifstream infile;
string line, cityName;
int xCoor, yCoor;
City* temp;

infile.open(filename);
while(getline(infile, line))
{
    istringstream iss(line, istringstream::in);

    iss >> cityName;
    while(iss >> xCoor >> yCoor)
    {
        temp = new City(cityName, xCoor, yCoor);
        addCity(temp);
    }
}

该函数将传递一个文件名,并收集城市名称,其x和y坐标,创建新的City对象,然后将该城市添加到矢量中。

我在滥用stringstream还是不是解决此问题的好方法?

编辑:

这是Map类

class Map {
    friend class City;
private:
    std::vector<City*> graph;
    void addCity(City* c) { graph.push_back(c); }
    City* findByNamePrivate(std::string cityName);
public:
    Map(std::string filename);
    City* findByName(std::string cityName) { return findByNamePrivate(cityName); }
};

Map的构造函数是我遇到的问题。

以为我也包括了这个,但我想没有。

City* Map::findByNamePrivate(string cityName)
{
    for(int i = 0; i < graph.size(); i++)
    {
        if(graph[i]->getName() == cityName)
        {
            return graph[i];
        }
    }
}

在其他地方调用此行时,程序失败

assert(map.findByName("bend") != NULL);

如果您写了“内容总是相同的格式,那么先是字符串,然后是int,然后是int”,我不明白为什么要使用while while(iss >> xCoord >> yCoord)。 对于您的格式,您可以简化读取过程:

while(infile >> cityName >> xCoor >> yCoor ) {
    addCity(new City(cityName, xCoor, yCoor));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM