2012-02-13 3 views
1

Существует ли функция в STL, которая получит следующий поплавок из файла?Получите следующий поплавок от istream?

.: например

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

Что говорят STL-документы? –

+1

Нет. Вам придется написать свой собственный. – Duck

ответ

1

/вывод поток функция ввода в C++ (и подобный же образом STDIO функция в C) предназначена для чтения форматированного ввода. То есть они предназначены для чтения значений типов, ожидаемых программой. Нет ничего, что пытается считывать значения из потока и принимать только определенный тип, отбрасывая другие значения. Кроме того, несколько неясно, что может быть «float»: например, «+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]; 
     } 
    } 
}