我有一个文本文件,每行有一些整数。例如:
1 2 4
3
0 4
2 3
此处第1行表示第1个节点连接到编号为1,2和5的节点。空白行表示第4个节点未连接到任何节点。
这给了我一个有向图。 This SO question可能有用,但它假设每行有2个整数,而在这种情况下,它可以有0到N-1之间的任意数量的整数(N是节点数)。
我只想知道如何阅读此文本文件。如果我每行有两个整数,我可以做infile>> a>>湾如何知道" \ n"或者行尾已经发生。 我不要求提供制作有向图的代码。
答案 0 :(得分:1)
来自linked question的已接受答案已经向您展示了如何逐行阅读,您需要为您的代码执行此操作,第一部分显示了如何读取行中所有数字的循环(istringstream)。因为您没有固定数量的条目,所以您可能希望将它们存储在std :: vector中。
答案 1 :(得分:1)
我不认为这是作业,因为实际的主题是有向图。
因此有些代码。但是,你必须自己做错误处理。
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
typedef std::vector<int> nl_t;
typedef std::vector<nl_t> nll_t;
int main()
{
std::ifstream is("test.dat");
std::string str;
nll_t nll;
while(std::getline(is,str)) {
std::istringstream ss(str);
nl_t nl;
int i;
while(ss >> i) {
nl.push_back(i);
}
nll.push_back(nl);
}
}
/**
Local Variables:
compile-command: "g++ -g test.cc -o test.exe; ./test.exe"
End:
*/
答案 2 :(得分:0)
关注此链接 http://www.c-plusplus.de/forum/p1940874#1940874。 阅读代码就足够了。没有必要理解德语文本。
在您的情况下您必须将主程序的第18行从while( datei >> ws )
更改为while( datei )
并删除第23和24行。因为在您的情况下,空行是一个信息。< / p>
或者你的主要看起来像这样:
ifstream file("input.txt");
if( !file.is_open() )
{
cerr << ">Error by opening the file\n";
return -2;
}
for( int node1 = 1; file.good(); ++node1 )
{
for( int node2; !is_endl(file) && file >> node2; )
cout << "Node " << node1 << " is connected with " << node2 << endl;
}