如何从 C++ 中的文本文件中逐行读取整数? [复制]
Posted
技术标签:
【中文标题】如何从 C++ 中的文本文件中逐行读取整数? [复制]【英文标题】:How to read integers line by line from a text file in c++? [duplicate] 【发布时间】:2020-02-24 20:10:58 【问题描述】:所以我有一个关于图表的问题,我必须从输入文件中读取多个案例并检查适当性。每个案例在第一行有 n,它具有的节点数,在第二行有一个整数序列 x y,其中 (x, y) 是一条边。问题是我不知道我有多少边缘,所以我不知道从哪里停止阅读。
例子:
输入文件:
5
1 2 1 3 1 4 2 5 3 5 4 5
7
1 2 4 5 2 6
我在网上到处寻找解决方案,但找不到适合我的解决方案。我发现的大多数解决方案都只读取字符串。我试图找到并停在 '\n' 但那根本没有用。 Int('\n') 在我的计算机上是 10,所以它与我的边缘序列中的 10 混淆了。它甚至没有读取'\n'。
【问题讨论】:
您需要改进搜索技术。我上周回答了一个类似的问题。 提示:您不必告诉我们您在其他地方没有找到解决方案,如果您找到了,为什么还要在这里问?写“我在网上到处寻找解决方案,但找不到解决方案”并没有传达任何有用的信息,而是让我们怀疑您只是没有足够的搜索 你说得有道理 :)) 没想到那么远。 【参考方案1】:这里有一个解决方案:
struct Edge
int x;
int y;
friend std::istream& operator>>(std::istream& input, Edge& e);
;
std::istream& operator>>(std::istream& input, Edge& e)
input >> e.x;
input >> e.y;
return input;
以下是一些主要代码:
int node_quantity = 0;
std::vector<Edge> database;
std::cin >> node_quantity;
// Ignore the newline following the number.
std::cin.ignore(1000, '\n');
// Start at the beginning of the line.
std::string text_line;
std::getline(std::cin, text_line);
// Read in the edges
std::istringstream text_stream(text_line);
Edge e;
while (text_stream >> e)
database.push_back(e);
上面的代码创建了一个边缘结构并重载了operator>>
以读取边缘。
第二个代码片段读入一行边缘,并使用std::istringstream
读取文本行中的所有边缘。
【讨论】:
以上是关于如何从 C++ 中的文本文件中逐行读取整数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章