2

各行の列数が異なるいくつかの列を持つファイルを読んでいますが、それらは異なる長さの数値であり、固定数の行 (20) を持っています。各列を配列に入れる方法は?

次のようなデータファイルがあるとします(各列の間にタブがあります)

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

これらの列を別の配列に配置する方法、その列 1 は 1 つの配列に移動し、列 2 は別の配列に移動します。列 2 のみが 2 桁以上の値を持ち、残りの列には 1 桁または 2 桁の値があり、1、2、および 3 以外の一部の列も null です。

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

Here's the main idea:

Use a 2D array instead of many 1D arrays.
Read each line using std::string.
Then use: istringstream is(str); which will help parse the string and put into the arrays like this:

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

、、およびのような一部の C++ ライブラリ クラスを利用する方が簡単なstd::vector場合std::istringstreamがあり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 に答える