对于项目,我需要实现图着色问题的解决方案。但是,输入需要具有特定的语法,我不知道如何解析以访问存储在变量中所需的数据。
输入约束首先输入颜色数,然后输入顶点数,然后输入一系列边。应以(v1 v2)
格式输入边。序列以v1 = -1终止。所以,(-1 0)
,(-1 -1)
等
因此,输入最终会看到以下内容:
2 4 (0 1)(1 2)(2 3)(3 0)(-1 -1)
任何帮助将不胜感激,因为我不知道从哪里开始!我知道这里有类似的问题,但是我无法弄清楚如何将这些解决方案用于这个特定的实现。
答案 0 :(得分: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
中。
答案 1 :(得分:0)
您可能需要查看standard input/output。基本上,要求用户输入输入,并按照以下方式进行输入:std::string mystr; std::getline(con, mystr);
然后使用>>
运算符和std::stringstream
进行解析。您可以通过将其存储在char中来跳过空格或括号。因此,要获得前两个数字,请执行:int colors, verts; char c; stringstream(mystr) >> colors >> c >> verts;
然后,您可以针对其余输入展开此数字。