【发布时间】:2019-03-05 20:16:21
【问题描述】:
我有一个文件 map.txt:
Montreal|Quebec,Toronto|30,40
New York|Boston,Philadelphia,Scranton|20,10,50
我想分配“|”之前的第一部分到cityString,第二部分到edgeString,第三部分到costString。然后,我将使用 boost 将字符串拆分为相应的向量,并将这些向量分配给自定义的 CityNode 对象。
这是我的代码:
string cityString;
string edgesString;
string costString;
vector<string> edgesVector;
vector<string> costVector;
vector<CityNode> cities;
int i = 0;
bool used = true;
string line;
ifstream myfile(this->fileName);
if (myfile.is_open())
{
while (getline(myfile, line))
{
cout << cityString << "|" << edgesString << "|" << costString << "\n"; // read line of file
boost::split(edgesVector, edgesString, [](char c) {return c == ','; }); //split edgesString into vector delimiter: ','
boost::split(costVector, costString, [](char c) {return c == ','; }); // split costString into vector delimiter: ','
//ASSIGN VARIABLES
cities[i].setValues(cityString, edgesVector, costVector);
i++;
}
myfile.close();
}
else cout << "Incorrect file format";
return cities;
当我打电话时
cout << cities[0].getName();
我明白了
||
||
而不是我想要的“蒙特利尔”。我认为错误是我从文件中读取变量的方式,但我不知道如何修复它。请帮忙。
【问题讨论】:
-
然后,我将使用 boost 将字符串拆分为相应的向量,并将这些向量分配给自定义的 CityNode 对象。 – 为什么?您如何处理这些值?
-
cout 并没有按照您的评论所说的那样做。
-
@NathanOliver 那里不需要提升。
-
@NathanOliver 因为该任务根本不需要提升。
-
@HassanG 基本上使用
std::getline()从文件中读取一行,然后使用std::getline()和'|'分隔符将字符串从std::istringstream中拆分出来,并进一步使用其他分隔符。看起来根本不需要使用 boost 来做到这一点。