用弦乐库解析行时的std :: getline问题

std::getline issue when parsing lines with stringstream library

本文关键字:std getline 问题      更新时间:2023-10-16

我在尝试从文件中读取弦线时会遇到错误,我似乎无法弄清楚问题是什么。

我收到的错误是:

  no matching function for call to 'getline'
  std::getline(parse_input, intensity, ',');

这是我试图解析的每个变量的重复。

以下是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
int main(int argc, char const *argv[])
{
  std::fstream fs;
  fs.open("test.dat");
  std::string* configuration_record;
  std::string temp_count;
  size_t no_of_records;
  if(!fs.is_open())
  {
    std::cerr << "File failed to open" << std::endl;
  }
  else
  {
    while(!fs.eof())
    {
      std::getline(fs, temp_count);
      no_of_records++;
    }
    fs.clear();
    fs.seekp(0);
  }
  std::string stimulation_type;
  std::string stimulation_name;
  double intensity;
  double frequency;
  double duration;
  std::string location;
  configuration_record = new std::string[no_of_records];
  for(size_t i=0; i<no_of_records; i++)
  {
    std::getline(fs, configuration_record[i]);
  }
  for(size_t i=0; i<no_of_records; i++)
  {
    size_t found;
    found = configuration_record[i].find("stim");
    if(found != std::string::npos)
    {
      std::stringstream parse_input(configuration_record[i]);
      std::getline(parse_input, stimulation_type, ',');
      std::getline(parse_input, stimulation_name, ',');
      std::getline(parse_input, location, ',');
      std::getline(parse_input, intensity, ',');
      std::getline(parse_input, frequency, ',');
      std::getline(parse_input, duration, ',');
      std::cout << stimulation_name << "," <<location << intensity << "," << frequency << "," << duration
      << std::endl;
    }
    else
    {
      std::stringstream parse_input(configuration_record[i]);
      std::getline(parse_input, stimulation_type, ',');
      std::getline(parse_input, stimulation_name, ',');
      std::getline(parse_input, intensity, ',');
      std::getline(parse_input, duration, ',');
      std::cout << stimulation_name << "," << intensity << "," << duration
      << std::endl;
    }
  }
  return 0;
}

手册中的getline声明为:

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);
istream& getline (istream&& is, string& str);

如您所见,他们接受istream(StringStream是有效的),但是第二个参数必须是string,因此当您通过doubleintensity,CC_4和duration)时,您正在调用一个不变函数。您可以使用临时字符串,然后使用stod:

将其保存到双重字符串。
std::string temp;
double intensity;
std::getline(parse_input, temp, ',');
intensity= std::stod (temp);