从文本文件中读取浮点数并复制到浮点数向量

时间:2014-05-27 23:50:39

标签: c++ vector text-files

我需要在c ++中创建一个代码,该代码从逗号分隔的文本文件中读取浮点数,并复制到浮点数<的向量< /strong>。文本文件包含数千个由逗号分隔的浮点整数(如1,1,69.8,110,0,-1.8,-1.8,0,120,0,0,0,0,3.23,我尝试使用 getline(),但我想这是为了将文本文件作为字符串读取,并保存在字符串向量中,而不是浮点数。任何人都可以帮我这个< / p>

以下代码无法按我预期的方式工作

vector<float> ReplayBuffer;
ifstream in;
in.open("fileName.txt");
if(in.is_open())
{
    in.setf(ios::fixed);
    in.precision(3);

   in.seekg(0,ios::end);
   fileSizes = in.tellg();

   in.seekg(0,ios::beg);
   float number = 0;
   for(int i = 0; i<fileSizes/sizeof(float);i++)
   {
    getline(in, ReplayBuffer[i],', ');
   }

   for(int i = 0;i<ReplayBuffer.size();i++)
    {  cout<<ReplayBuffer[i]<<" , "<<endl; }
   in.close();
    }
}

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是

for (std::string f; getline(in, f, ',');)
  ReplayBuffer.push_back(std::stof(f));

如果文件中的浮点数无效,则需要将其包装在try - catch块中。

然后您的代码可以简化为

vector<float> ReplayBuffer;
ifstream in("fileName.txt");

for (std::string f; getline(in, f, ',');)
  ReplayBuffer.push_back(std::stof(f));

for (auto f : ReplayBuffer)
  std::cout << f << " , ";

fixedprecision仅影响输出(除非您使用的是自定义num_get方面),即使您要保留原始代码,这两行也不会执行任何操作。