C ++ Beginner Project,从字符串中分离出有意义的内容

时间:2014-05-28 06:44:14

标签: c++ string graph

我最近开始学习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'。

0 个答案:

没有答案