2

我正在读取文件,它有一些列,每行有不同的列数,它们是不同长度的数值,我有固定的行数(20)如何将每一列放入数组中?

假设我有如下数据文件(每列之间有标签)

20   30      10
22   10       9       3     40 
60    4
30    200   90
33    320    1        22    4

如何将这些列放入不同的数组中,第 1 列到一个数组,第 2 列到另一个数组。只有第 2 列有超过 2 个数字值,其余列有 1 或 2 个数字值,除了 1、2 和 3 之外,有些列也为空

int main()
{     
    ifstream infile;
    infile.open("Ewa.dat");

    int c1[20], c2[20], ... c6[20];

    while(!infile.eof()) { 
        //what will be the code here?
        infile >>lines;
        for(int i = 1; i<=lines; i++) {
            infile >> c1[i];     
            infile >> c2[i];
             .
             .
            infile >> c6 [20]; 
        }
    }
}
4

2 回答 2

1

这是主要思想:

使用 2D 数组而不是许多 1D 数组。
使用 读取每一行std::string
然后使用: istringstream is(str);这将有助于解析字符串并像这样放入数组中:

while(...) {
    ....
    getline(infile, str);
    istringstream is(str);
    j=0;
    while(is)
        {
            is >> c[i][j];
        }
    i++;
    ....
    }

I'll leave the rest to you.

于 2012-05-09T18:23:13.067 回答
1

It might be easier to take advantage of some of some C++ library classes, like std::vector, std::istringstream, and std::string:

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

int main() {
  std::vector<std::vector<int> > allData;

  std::ifstream fin("data.dat");
  std::string line;
  while (std::getline(fin, line)) {      // for each line
    std::vector<int> lineData;           // create a new row
    int val;
    std::istringstream lineStream(line); 
    while (lineStream >> val) {          // for each value in line
      lineData.push_back(val);           // add to the current row
    }
    allData.push_back(lineData);         // add row to allData
  }

  std::cout << "row 0 contains " << allData[0].size() << " columns\n";
  std::cout << "row 0, column 1 is " << allData[0][1] << '\n';
}
于 2012-05-09T18:35:38.157 回答