C 如何将数据文件读取到结构或向量以及返回结构或向量

C++ How to read data file to struct or vectors and return struct or vectors?

本文关键字:结构 向量 返回 读取 数据 文件      更新时间:2023-10-16

我已经在matlab中做到了这一点,并想在C 中进行。我想从外观类似的文件中读取的文件:

0,397   0,372   0,385   0,354   0,397   0,384
0,389   0,347   0,385   0,317   0,397   0,380
0,379   0,308   0,381   0,285   0,395   0,361

由于数据的表示,因此我必须选择一种存储它的方法。我做了一个名为Orldata的类,该类应该具有读取文本文件的函数,并将数据放入数组或构造中:

struct DATA
{
  float a[400];
  string line;
} orldata[1200];

该结构应像普通数组一样工作,orldata [1] .a [2] = 0,347等。但是,在寻找更好的解决方案时,我认为返回数组是不好的做法,最好使用向量。(但是我还没有与那些的突破,所以我继续结构)

我的代码如下,实际上正在工作。这尚未在类orldata中实现,直到现在是主要的。它将文件加载到结构orldata中:

 struct DATA
 {
     float a[400];
     string line;
 } orldata[MAX];

int main()
{
   int counter = 0;
   int index = 0;
   std::string Filename = "orl/orl_data.txt";
   std::ifstream input(Filename);
   std::string line;
   while (std::getline(input, line)) {
      counter++;
      orldata[counter].line = line;
   }
   for (int i = 0; i < MAX; i++) {
       std::istringstream iss(orldata[i].line);
       for (std::string s; iss >> s; ) {
           orldata[i].a[index] = strtof((s).c_str(), 0);
           index++;
       }
       index = 0;
   }
   std::cout << orldata[2].a[5];
   return 0;
  }

但是,当我尝试将此代码放入应返回其崩溃的结构的函数时:

DATA ORLData::create_orl_data() {
   DATA orldata[1200];
   ....
   return orldata[1200];
}
...
int main(){
   ORLData orltemp;
   ORLData::DATA orlstruct = orltemp.create_orl_data();
   ....
}

到现在为止,我知道像这样返回结构数组是不好的做法。我了解到最好使用向量,但我还没有弄清楚如何将它们实际用作矩阵。

因此,我的问题可以求和到:我想从看起来像上面的文本文件中读取,然后将它们加载到像数组[0] .A [2]的数组中,该数组应该存储所有数据。我该怎么做?

请询问您是否要我详细说明我遇到的问题。

DATA ORLData::create_orl_data() {
   DATA orldata[1200];
   ....
   return orldata[1200];
}

在几个帐户上是错误的。

  1. 它只能返回数组的一个元素。
  2. orldata索引的有效范围为0-1199。return orldata[1200]使用超边界索引访问数组,并导致不确定的行为。在您的情况下,这会导致崩溃。

更改该功能以返回std::vector<DATA>

std::vector<DATA> ORLData::create_orl_data() {
   std::vector<DATA> orldata;
   ....
   return orldata;
}