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

Reading floating point numbers from text file and copying to a vector of floating point numbers

本文关键字:浮点数 复制 向量 读取 文本 文件      更新时间:2023-10-16

我需要在c++中编写一个代码,从以逗号分隔的文本文件中读取浮点数并复制到浮点数的向量。文本文件包含数千个用逗号分隔的浮点整数(如1,1,69.8,110,0,-1.8,-1.8,0,120,0,0,0,0,0,3.23,)。我尝试使用getline(),但我猜这是为了读取文本文件作为字符串,并保存在字符串的矢量,而不是浮点数。有谁能帮我这个忙吗?

下面的代码没有按我期望的方式工作

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();
    }
}

最简单的方法也许是

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 facet),即使您要保留原始代码,这两行也不做任何事情。