用弦乐库解析行时的std :: getline问题
std::getline issue when parsing lines with stringstream library
我在尝试从文件中读取弦线时会遇到错误,我似乎无法弄清楚问题是什么。
我收到的错误是:
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
,因此当您通过double
(intensity
,CC_4和duration
)时,您正在调用一个不变函数。您可以使用临时字符串,然后使用stod:
std::string temp;
double intensity;
std::getline(parse_input, temp, ',');
intensity= std::stod (temp);
相关文章:
- 在 std::getline 和 std::cin 期间卡在循环中
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- std::getline没有在while循环中重新请求用户输入
- 如何将 std::getline 转换为模板类型?
- 如何在 std::getline 中自定义分隔符
- 使用std::getline()读取一行
- std::getline with std::fstream
- 在 std::getline() 上使用任何字符作为分隔符
- C++ - 重复 std::getline() 作为用户整数输入?
- std::getline 读取最后一个字符串两次
- std::getline 未产生正确的输出 (C++)
- C STD :: getline / std :: Sort无法正常工作
- std::getline(std::cin, string) 可能因键盘输入失败的方式
- 可以将std::getline()与从std::string中移出的字符串一起使用吗
- 为什么在同一输入上调用std::getline()n次会产生第n个标记化
- std :: getline(输入,d.info)不起作用
- 用弦乐库解析行时的std :: getline问题
- std :: getline()读取马车返回 r,如何避免
- SEGFAULT与STD :: getline一起使用定界线
- progam在std :: getline AM之后停止响应,代码中是否存在错误