1

2 列と多数の行を含むテキスト ファイルがあります。各列はスペースで区切られています。さらに計算するために、それらを2D配列に読み取る必要があります。私のデータファイルは次のようになります

0.5 0.479425539
1   0.841470985
1.5 0.997494987
2   0.909297427
2.5 0.598472144
3   0.141120008
3.5 -0.350783228
4   -0.756802495
4.5 -0.977530118
5   -0.958924275  

そして、私の弱い試みは

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <ctype.h>
using namespace std;

int main () {
  char line,element;
  std::ifstream myfile ("C:\\Users\\g\\Desktop\\test.txt");
  if (myfile.is_open())
  {
    while ( myfile.good() )
    {
      getline(myfile,line);
       cout << line<<endl;               
      _getch();
    }
    myfile.close();

  }

  else cout << "Unable to open file"; 

  return 0;

}

問題は、それらを正しく読み取ることができないことです....行全体を読み取るか...区切り文字を「スペース」として指定すると、次の行を読み取れません。

Plsは何が間違っているかを指摘します。さらに計算するためにデータを2次元配列に保存するにはどうすればよいですか。ありがとうございました

4

3 に答える 3

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

int main(int argc, char** argv) {
   std::ifstream f(argv[1]);
   std::string l;
   std::vector<std::vector<double> > rows;
   while(std::getline(f, l)) {
       std::stringstream s(l);
       double d1;
       double d2;
       if(s >> d1 >> d2) {
           std::vector<double> row;
            row.push_back(d1);
            row.push_back(d2);
            rows.push_back(row);
        }
    }

    for(int i = 0; i < rows.size(); ++i)
        std::cout << rows[i][0] << " " << rows[i][1] << '\n';
}

最後の for ループは、「配列」内の値を使用する方法を示しています。変数 rows は、厳密には配列ではなく、ベクトルのベクトルです。ただし、ベクトルは C スタイルの配列よりもはるかに安全であり、[] を使用してその要素にアクセスできます。

[これを投稿したとき、非常によく似たプログラムが回答として投稿されているのを見ました。私は自分のものを独自に書きました。]

于 2013-01-30T09:41:20.983 に答える