Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从文件中读取数据_C++_File - Fatal编程技术网

C++ 从文件中读取数据

C++ 从文件中读取数据,c++,file,C++,File,我有一个.txt文件,其中包含如下数据 [12,25],[36,45]即数字用方括号括起来,用逗号隔开 我想通过C++程序阅读这样的文件 我提到了可用的字符串工具包,特别是可以使用regex工具,但我无法放入程序。有人能帮我吗?我猜这些是坐标吗?如果是的话,你想过为它们编写一个简短的解析器吗?这样你就可以读出顶点列表了 或者,如果你真的想使用正则表达式,你可能想下载这个库,boost.regex是一个梦想:)只需像这样使用scanf或fscanf: if(scanf("[%d,%d]",&

我有一个.txt文件,其中包含如下数据 [12,25],[36,45]即数字用方括号括起来,用逗号隔开 我想通过C++程序

阅读这样的文件
我提到了可用的字符串工具包,特别是可以使用regex工具,但我无法放入程序。有人能帮我吗?

我猜这些是坐标吗?如果是的话,你想过为它们编写一个简短的解析器吗?这样你就可以读出顶点列表了


或者,如果你真的想使用正则表达式,你可能想下载这个库,boost.regex是一个梦想:)

只需像这样使用
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函数是有效的C++。< /P> <代码>
#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;
}
#包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 布尔isSeparator(常量字符c){ 返回c='['| | c=']'| | c==','; } int main(){ const char filename[]=“data.txt”; ifstream-fin(文件名); 向量v; 琴弦浅黄色; while(getline(fin,buff)){ 如果(buff.begin()、buff.end()、isSeparator“”),则替换_; istringstream sin(浅黄色); 对于(int n;sin>>n;){ v、 推回(n); } } 复制(v.begin(),v.end(),ostream_迭代器(cout,“\n”);
//对于(int i=0;我到目前为止你写过代码吗?你能把你的问题说得更清楚一点吗?现在有点让人困惑。文件中包含[10,20]、[15,35]之类的数字现在我如何才能得到数组中的10×20和35……我不希望像拾取字符那样的正常方法扫描直到N,我知道这样的逻辑,我想要的是使用Strutk的高效C++代码……最好在SttkKNE中使用正则表达式特征。自从上一个小时以来,你不需要正则表达式来完成这个操作,简单地使用流中的提取器操作符。