我最近开始学习c ++并正在开展一个小项目。该项目的目标是在由两个输入文件构造的图形上运行Dijkstra算法。一个文件包含节点列表,定向连接和相关成本。第二个文件列出了需要检查的路径。最后,我们需要将结果输出到新文件。
我的问题与获取输入文件并分离出输入的有用信息有关。
第一个输入文件格式如下:
a->b=2
c<->e=2
如“a”之类的字母代表节点,' - &gt;'和'&lt; - &gt;'告诉我节点之间的连接类型和整数是转换的成本。
关于这个问题,我目前有一个处理文件加载的类,一次读取每行,并将其添加到字符串向量中。
bool FileUtil::ReadAllLines(std::vector<std::string>& out){
//Get filename
std::cout << "Please enter filename: ";
std::string filename;
std::getline(std::cin, filename);
std::cout << "\n";
//Load file
std::ifstream fileToLoad(filename);
if (fileToLoad.is_open())
{
//Read contents
while (!fileToLoad.eof())
{
std::string content;
std::getline(fileToLoad, content);
out.push_back(content);
}
return true;
}
else
{
return false;
}
}
然后将此信息传递给我的图构造函数,该构造函数需要为向量循环,并且每个字符串分别返回每个节点和连接的成本。任何帮助将非常感激。也是新的我不完全确定适当的术语等,请随时纠正我。提前谢谢!
编辑: 好了,我已经制作了更多的工作,我应该能够利用它来完成预期的任务。但必须有一个比这更好的方法,这就是我感兴趣的东西。
for (size_t i = 0; i < fileOut.size(); i++)
{
char origin = ' ', destination = ' ', cost = ' ';
for (auto c : fileOut[i])
{
if (isalpha(c))
{
if (origin == ' ')
{
origin = c;
}
else if (origin != ' ' && destination == ' ')
{
destination = c;
}
}
else if (isdigit(c))
{
cost = c;
}
}
}
这现在需要“a-&gt; b = 2”并给我三个变量origin ='a',destination ='b'和cost ='2'。