从istream中获取下一个浮点数?

时间:2012-02-13 03:38:36

标签: c++ istream file-io

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"

1 个答案:

答案 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];
        }
    }
}