如何区分线段和两者之间的空格?C++

How do I distinguish both line segments and spaces in between? C++

本文关键字:空格 C++ 两者之间 区分线      更新时间:2023-10-16

我正在尝试从.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

等等。

请帮帮我。谢谢。

要激活operator>>的跳过空格,您需要插入:

myFile >> std::skipws;

但默认情况下会激活此功能。那么std::skipws现在跳过什么呢?答案是std::isspace上的任何内容,包括换行符'n'和空格' '这意味着您不必在这些之间切换。

您的程序中有一个错误,那就是您填充了 3 个输入,但循环i < numEdge*3这会导致填充numEdge*9输入,这太多了。

你使用了非 mcve 语句,如 graph = createGraph(numVert);addEdge(graph, src, dest, weight);,所以我从代码中排除了这些语句。你也不应该use namespace std;.

#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);
    }
}

输出:

numVert = 3
numEdge = 6
line 1 : src = 1, dest = 4, weight = 2
line 2 : src = 2, dest = 4, weight = 6
line 3 : src = 2, dest = 3, weight = 2
line 4 : src = 1, dest = 2, weight = 3
line 5 : src = 2, dest = 5, weight = 6
line 6 : src = 2, dest = 1, weight = 5
line 7 : src = 1, dest = 4, weight = 3