2012-02-02 26 views
1

我開始寫C++,我試圖讀取的格式像這樣的文本文件:C++相當於一個掃描儀的.nextFloat()方法?

32.0  12.43 
503.2  3.212 

在Java中,我可以用一個Scanner.nextFloat(),並將包含到Array。我試圖用C++實現同樣的事情。這是如何完成的?

+0

歡迎來到C++,隨時準備好搞定xD(不介意) – 2012-02-02 21:12:19

+0

到目前爲止您嘗試了什麼? – 2012-02-02 21:16:14

+0

@ Anony-Mousse爲什麼這麼說?他正在C++中尋求一些等價物。你是否想問他迄今爲止的研究? – 2012-02-02 21:23:39

回答

6

從標準輸入

#include <iostream> 

int main() 
{ 
    float f1, f2, f3, f4; 
    std::cin >> f1 >> f2 >> f3 >> f4;  
} 

讀從文件

#include <fstream> 

int main() 
{ 
    std::ifstream fin("file.txt"); //fin is an arbitrary identifier 
    float f1, f2, f3, f4; 
    fin >> f1; 
    fin >> f2; 
    fin >> f3; 
    fin >> f4; // or fin >> f1 >> f2 >> f3 >> f4; no difference  
} 

讀取要讀取所有漂浮在float陣列(向量)時,可以使用這樣的:

#include <fstream> 
#include <vector> 
#include <iterator> //for istream_iterator and back_inserter 
#include <algorithm> //for copy 

int main() 
{ 
    std::ifstream fin("input.txt"); 
    std::vector<float> v; //could also initialize with the two-iterator constructor 
    std::copy(std::istream_iterator<float>(fin), 
       std::istream_iterator<float>(), 
       std::back_inserter(v)); //push_back into vector 
} 

瞭解更多關於流輸入/輸出here和其他地方。 我還強烈建議您閱讀a good C++ book

+0

Armen,這是從控制檯還是文件讀取?我試圖從文件中讀取。 – Derek 2012-02-02 21:12:34

+0

@Derek:更新 – 2012-02-02 21:14:13

+0

@Derek:更新了一個數組示例 – 2012-02-02 21:20:34

-2

您可以使用string :: find()或使用strtok()或使用Boost Tokenizer來構建一個String Tokenizer。我不知道預先存在的Scanner等價物。

也期待在這個線程:Converting from Java to C++ Reading a File, and parsing

+3

-1,這個問題如何回答? – 2012-02-02 21:13:53

+0

讓他知道沒有很多強大的掃描儀等值。並給他一些自己寫的選項。它怎麼沒有? – Sid 2012-02-02 21:15:14

+0

我做到了。這是一個很好的答案,但我不認爲它是一個掃描儀等效。如果他有更復雜的文件格式或更多數量的花車會怎麼樣? – Sid 2012-02-02 21:17:27

0

C++有很多很好的天然選擇讀取數據,例如給std :: cin對用戶輸入數據和std :: ifstream的的文件。 但是,如果你正在尋找一個非常相似的Java實現掃描儀,你可以在一個名爲掃描++開源項目找到它:Java的掃描儀類的http://sourceforge.net/projects/scannerpp/

許多很好的功能實現還有,包括nextFloat()方法。

#include "Scanner.h" 

using namespace scannerpp; 

int main() 
{ 
    // to work with strings 
    Scanner scanner("32.0 12.43 \n 503.2 3.212"); 
    float x = scanner.nextFloat(); 

    // to work with files 
    Scanner scanner(new File("test-data.txt")); 
    float x2 = scanner.nextFloat(); 
} 

希望這有助於!