0

对于一个项目,我需要实现图形着色问题的解决方案。但是,输入需要具有特定的语法,我不知道如何解析以访问存储在变量中所需的数据。

输入约束是首先输入颜色的数量,然后是顶点的数量,然后是一系列边。边缘应以格式输入(v1 v2)。该序列以 v1 = -1 终止。所以, (-1 0), (-1 -1), 等等。

所以输入最终会看起来像这样的东西:

2 4 (0 1)(1 2)(2 3)(3 0)(-1 -1)

任何帮助将不胜感激,因为我什至不知道从哪里开始!我知道这里有类似的问题,但是我不知道如何将他们的解决方案应用于这个特定的实现。

4

2 回答 2

2

尝试这样的事情:

#include <iostream>

static inline int error(int n) { std::cerr << "Input error!\n"; return n; }

int main()
{
    int nc, nv;  // number of colours and vertices

    if (!(std::cin >> nc >> nv)) { return error(1); }

    for (int i = 0; i != nv; ++i)
    {
        char lb, rb;
        int v1, v2;
        if (!(std::cin >> lb >> v1 >> v2 >> rb) || lb != '(' || rb != ')') { return error(1); }

        std::cout << "We have a pair [" << v1 << ", " << v2 << "]\n";
    }
}

注意输入处理的关键原则:所有输入操作都出现在条件上下文中。正如@jedwards 所说,输入可以是任意的std::istream,例如字符串流或文件流,或者在我的示例std::cin中。

于 2012-05-06T00:21:37.757 回答
0

您可能想查看标准输入/输出。基本上,要求用户输入输入,并像这样得到它:std::string mystr; std::getline(con, mystr);然后使用>>运算符和解析它std::stringstream。您可以通过将其存储在字符中来跳过空格或括号。因此,要获得前两个数字,请执行以下操作:int colors, verts; char c; stringstream(mystr) >> colors >> c >> verts;然后您可以将其扩展为其余的输入。

于 2012-05-06T00:18:40.897 回答