Подтвердить что ты не робот

Чтение данных из файла

У меня есть .txt файл, который содержит данные следующим образом [12,25], [36,45] числа заключены в квадратные скобки, разделенные запятой друг от друга Я хочу прочитать этот файл через программу на С++

Я назвал доступным набор инструментов для строк, в частности средство regex можно использовать, но я не могу вставить программу, может кто-то, пожалуйста, помогите мне??

4b9b3361

Ответ 1

#include <iostream>
#include <iterator>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool isSeparator(const char c){
    return c == '[' || c == ']' || c == ',';
}

int main(){
    const char filename[] = "data.txt";

    ifstream fin(filename);
    vector<int> v;
    string buff;
    while(getline(fin, buff)){
        replace_if(buff.begin(), buff.end(), isSeparator, ' ');
        istringstream sin(buff);
        for(int n;sin >> n;){
            v.push_back(n);
        }
    }
    copy(v.begin(), v.end(), ostream_iterator<int>(cout,"\n"));
    //for(int i=0;i<v.size();++i) cout << v[i] << endl;
}

Ответ 2

просто используйте scanf или fscanf следующим образом:

if(scanf("[%d,%d]",&a[i],&b[i])==2){
  ++i;
  while(scanf(",[%d,%d]",&a[i],&b[i])==2) ++i;
}

не забывайте, что C I/O функции действительны С++.

Ответ 3

Я был бы прав, если угадал, что это координаты, если вы так думали о написании короткого парсера для них? Итак, вы можете зачитать список вершин?

В качестве альтернативы, если вы действительно хотите перейти по пути регулярного выражения, вам может потребоваться загрузить библиотеку boost, повысить. regex работает сон:)