STL中是否存在一个从文件中获取下一个浮点数的函数?
e.g:
Data.txt:
blah blah blah blah blah
blah blah blah blah blah
blah 0.94 blah blah blah
std::istream inputFile(Data.txt);
float myNumber = inputFile.GetNextFloat();
std::cout << myNumber << std::endl; // Prints "0.94"
答案 0 :(得分:1)
C ++中的I / O流功能(以及C中的stdio功能)设计用于读取格式化输入。也就是说,它们适合于读取程序预期类型的值。没有任何东西试图从流中读取值并且只接受特定类型,丢弃其他值。此外,有些不清楚“浮动”可能是什么:例如,“+1”对某些人来说是一个非常好的“浮动”,而其他人可能希望它至少包含一个小数点,甚至可能至少包含一个数字小数点。
C ++ 2011和Boost(如果您无权访问C ++ 2011实现)实现正则表达式,您应该能够使用此方法检测与您的首选定义匹配的下一个浮点数。以下是此技术的简单演示:
#include <iostream>
#include <string>
#include "boost/regex.hpp"
namespace re = boost;
int main()
{
re::regex floatre("^[^-+0-9]*([-+]?[0-9]+\\.[0-9]+)(.*)");
for (std::string line; std::getline(std::cin, line); )
{
re::smatch results;
while (re::regex_match(line, results, floatre))
{
std::cout << " float='" << results[1] << "'\n";
line = results[2];
}
}
}