C ++在读取文件时忽略某些字符串

时间:2017-05-22 01:39:08

标签: c++ string file load ignore

我目前正在尝试Clique Problem并遇到了一个问题。我正在从文件中读取图形,但文件遵循特定格式:

c   File  p_hat1500-1.clq
c   
c
p edge  1500    284923  
e 4 1
e 5 3
e 5 4
e 6 2

在每一行之前是一个字母,表示该行上的内容(无论是注释(c)还是边缘(e)),我试图找出如何读取文件并忽略所有元素从边数开始,这样就可以这样读:

4 1
5 3
5 4
6 2

到目前为止,我只是在阅读这样的文件:

ifstream file("graph.clq");

并加载

file >> n;

1 个答案:

答案 0 :(得分:1)

试试这个

#include <vector>
#include <iostream>
#include <utility>
#include <fstream>
#include <string>

using std::cout;
using std::endl;
using std::cerr;
using std::vector;
using std::string;

vector<std::pair<int, int>> read_graph_file(const string& file);

int main() {

    auto edges = read_graph_file("input.txt");
    for (auto edge : edges) {
        cout << edge.first << " " << edge.second << endl;
    }

    return 0;
}


vector<std::pair<int, int>> read_graph_file(const string& file) {
    auto fin = std::ifstream{file.c_str()};
    if (!fin) {
        throw std::runtime_error{"Could not open file"};
    }

    auto edges = vector<std::pair<int, int>>{};

    auto input_type = char{};
    while (fin >> input_type) {
        if (input_type != 'e') {
            while (fin.get() != '\n') {}
        } else {
            auto edge = std::pair<int, int>{};
            fin >> edge.first >> edge.second;
            edges.push_back(edge);
        }
    }

    return edges;
}