【问题标题】:Reading data from file从文件中读取数据
【发布时间】:2011-10-16 10:21:10
【问题描述】:

我有 .txt 文件,其中包含如下数据 [12,25],[36,45] 即数字括在方括号中,以逗号分隔 我想通过 C++ 程序读取这样的文件

我提到了可用的字符串工具包,特别是可以使用正则表达式工具,但我无法放入程序,有人可以帮助我吗??

【问题讨论】:

  • 到目前为止你写过代码吗?
  • 你能把你的问题说得更清楚一点吗?现在有点混乱。
  • 文件将包含 [10,20],[15,35] 之类的数字...现在我怎样才能在数组中获得 10 20 15 35...我不想要像这样的普通方法选择字符扫描它直到结束 n 我只知道这样的逻辑我想要的是使用 strtk 的高效 C++ 代码......最好在 strtk 中使用正则表达式功能
  • 请任何人......自上一小时以来一直卡住
  • 您不需要正则表达式来执行此操作,只需使用流中的提取器运算符

标签: c++ file


【解决方案1】:

只需像这样使用scanffscanf

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

不要忘记 C I/O 函数是有效的 C++。

【讨论】:

    【解决方案2】:

    我猜这些是坐标是否正确,如果是的话,您是否考虑过为它们编写一个简短的解析器?所以你可以读出一个顶点列表?

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

    【讨论】:

      【解决方案3】:
      #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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2014-03-16
        • 2013-09-20
        • 2018-07-06
        • 2014-01-07
        • 2019-09-17
        相关资源
        最近更新 更多