Чтение данных из файла - PullRequest
11 голосов
/ 16 октября 2011

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

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

Ответы [ 3 ]

1 голос
/ 16 октября 2011

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

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

не забывайте, что функции CI / O являются допустимыми C ++.

0 голосов
/ 16 октября 2011
#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;
}
0 голосов
/ 16 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...