我正在尝试从一个看起来像这样的文本文件中读取
bend 6 7
fairbanks 3 5
并逐行重复。内容总是相同的格式,所以string,然后是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);
答案 0 :(得分:1)
我无法理解为什么你使用循环while(iss&gt;&gt; xCoord&gt;&gt; yCoord)如果你写了“内容总是相同的格式,所以字符串,然后是int,然后是int”。对于您的格式,您可以简化您的阅读程序:
while(infile >> cityName >> xCoor >> yCoor ) {
addCity(new City(cityName, xCoor, yCoor));
}