解析格式化的用户输入在C ++中(Parsing formatted user input in C

2019-10-31 16:15发布

对于一个项目,我需要实现一个解决图的着色问题。 但是,输入需要有与我对如何通过以访问变量来存储所需要的数据解析不知道具体的语法。

输入约束到第一输入的颜色的数量,则该顶点的数目,随后的边缘序列。 边缘应在格式输入(v1 v2) 该序列终止于V1 = -1。 所以, (-1 0) (-1 -1)等。

所以输入会显得沿着线的东西:

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

任何帮助将不胜感激,因为我不知道在哪里甚至开始! 我知道这里也有类似的问题,但是我无法弄清楚如何申请自己的方案来解决这个具体实施。

Answer 1:

尝试是这样的:

#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



Answer 2:

你可能要考虑的标准输入/输出 。 基本上,要求用户输入的输入,并获得这样的: std::string mystr; std::getline(con, mystr); std::string mystr; std::getline(con, mystr); 然后使用解析它>>经营者和std::stringstream 。 你可以只将其存储在一个char跳过空格或括号。 因此,要获得前两个数字,这样做: int colors, verts; char c; stringstream(mystr) >> colors >> c >> verts; int colors, verts; char c; stringstream(mystr) >> colors >> c >> verts; 然后,您可以扩大此为您输入的其余部分。



文章来源: Parsing formatted user input in C++