2012-02-13 92 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文檔說什麼? – 2012-02-13 03:42:49

+1

不需要。你必須自己寫。 – Duck 2012-02-13 03:43:34

回答

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