我正试图从.txt文件中为使用C ++创建边缘邻接列表的程序引入数据,但是它并没有达到我想要的方式。我对ifstream >>函数的分隔符不了解。
我知道ifstream >>会忽略线段并读取下一个值,但是我不确定它是否也忽略空格。
int numVert;
int numEdge;
int src, dest, weight;
ifstream myFile("Ginput.txt");
myFile >> numVert;
myFile >> numEdge;
graph = createGraph(numVert);
for (int i = 0; i <= numEdge*3; i++)
{
myFile >> src;
myFile >> dest;
myFile >> weight;
addEdge(graph, src, dest, weight);
}
.txt文件格式如下:
3 6
1 4 2
2 4 6
2 3 2
1 2 3
2 5 6
2 1 5
1 4 3
前2个整数分别表示顶点数和边数。
第一行之后的第一位是来源,第二位是目的地,第三位是重量。
它应该做的是区分行和空格,并将整数输入正确的数据中。 因此,应该是:
numVert = 3;
numEdge = 6;
First line: src = 1, dest = 4, weight = 2
Second line: src = 2, dest = 4, weight = 6
以此类推。
请帮帮我。谢谢。
答案 0 :(得分:2)
要为rxjava
激活跳过空格,您将插入:
operator>>
,但默认情况下已激活。那么std::skipws
现在会跳过什么?答案是在std::isspace
上正确的一切,包括换行符myFile >> std::skipws;
和空格'\n'
,这意味着您不必在这两者之间进行区分。
程序中有一个错误,就是您要填充3个输入,但是循环' '
会导致填充i < numEdge*3
个输出,这太多了。
您使用了非{mcve语句,例如numEdge*9
和graph = createGraph(numVert);
,所以我从代码中排除了这些语句。您也是shouldn't use namespace std;
。
addEdge(graph, src, dest, weight);
输出:
#include <iostream>
#include <fstream>
int main() {
int numVert;
int numEdge;
int src, dest, weight;
std::ifstream myFile("Ginput.txt");
myFile >> numVert;
myFile >> numEdge;
myFile >> std::skipws;
std::cout << "numVert = " << numVert << '\n';
std::cout << "numEdge = " << numEdge << '\n';
//graph = createGraph(numVert);
for (int i = 0; i <= numEdge; i++){
myFile >> src;
myFile >> dest;
myFile >> weight;
std::cout << "line " << i + 1 << " : src = " << src << ", dest = " << dest << ", weight = " << weight << '\n';
//addEdge(graph, src, dest, weight);
}
}