2012-02-13 6 views
1

ファイルから次のフロートを取得する関数がSTLに存在しますか?istreamから次のfloatを取得しますか?

例えば:

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++でのI/Oストリーム機能(およびCで同様に標準入出力関数は)フォーマットの入力を読み取るように設計されています。つまり、プログラムによって期待される型の値を読み込むように調整されています。ストリームから値を読み込み、特定の型だけを受け取り、他の値を破棄するものはありません。また、「浮動小数点数」とは何かが不明です。たとえば、「+1」は完全に良い「浮動小数点数」ですが、他の小数点は少なくとも小数点小数点

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