std::stof()
需要:
float std::stof(const std::wstring &,size_t *)
float std::stof(const std::string &,size_t *)
该函数是将一个由空格分隔的字符串转换为一个包含浮点数的向量。我尝试使用该std::stof()
函数将字符转换为浮点数。我无法找到一个解决方案转换const char&
到const std::string&
该std::stof()
需求。
如何将const char& s
变量转换为const std::string&
变量?
#include<string>
#include <vector>
std::vector<float> parseLine(std::string line)
{
std::vector<float> parsedLine{};
for (int i{}; i < line.size(); i++)
{
if (line[i] != ' ')
{
const char& s = line[i];
float fs = std::stof(s);
parsedLine.push_back(fs);
}
}
return parsedLine;
}
您实际上应该搜索空格分隔符并相应地提取它们之间的子字符串,例如:
#include <string>
#include <vector>
#include <cctype>
std::vector<float> parseLine(const std::string &line)
{
auto is_space = [](unsigned char ch){ return std::isspace(ch); };
std::vector<float> parsedLine;
auto end = line.begin(), start;
while ((start = std::find_if_not(end, line.end(), is_space)) != line.end())
{
end = std::find_if(start, line.end(), is_space);
std::string s(start, end);
float fs = std::stof(s);
parsedLine.push_back(fs);
}
return parsedLine;
}
如果您std::istringstream
改为使用,则可以大大简化:
#include <string>
#include <vector>
#include <sstream>
std::vector<float> parseLine(const std::string &line)
{
std::vector<float> parsedLine;
std::istringstream iss(line);
// optional:
// iss.exceptions(std::istringstream::failbit);
float fs;
while (iss >> fs){
parsedLine.push_back(fs);
}
return parsedLine;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句