2011-05-28 70 views
0

內的文本文件C++什麼是從文本文件讀取的好方法?

的 - 文本文件的開始----

 
Physics 

0 

Chemistry 

1 

English 

2 

----文本文件的末尾

 
class Book 
{ 
private: 
    string title; 
    int category; 
}; 

1) 我想存儲物理學,化學,英語題目; 和0,1,2分類;

前, 物理學類0 chemisty是1類 英語2

我有什麼種類...

 
    string title; 
    string number; 

if(book_input.is_open()) 
    while(!book_input.eof()) 
{ 
    getline(book_input, title, '\n'); 
    getline(book_input, number, '\n'); 

    Book list(title, number); 
} 

這是存儲的好方法?

回答

4

這看起來像一個合理的開始,但你閱讀的代碼應該是:

while(getline(book_input, title, '\n') && getline(book_input, number, '\n')) { 
    Book abook(title, number); 
    // do something with abook 
} 

不要測試對eof,看到this link原因。

讀取書本時,您必須對每本書進行一些操作,書籍構造函數將不得不將其第二個參數從字符串轉換爲int。

+0

也許(將鏈接)的解釋,爲什麼不考對EOF。 – Xeo 2011-05-28 08:42:58

+0

@Xeo我厭倦了告訴人們 - 通過一切手段自己添加一個鏈接。 – 2011-05-28 08:48:40

1

C++可以使用value << stream來輸入除字符串以外的其他類型。例如int

您可以使用類似的方法(但向後從)這個例子:

http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.2

這是存儲的好方法?

你的類定義沒問題。您還需要定義一個構造函數,雖然:

class Book 
{ 
public: 
    Book(string title, int category) 
     : title(title), 
     category(category) 
    { 
    } 

// Todo: Maybe also some getters for title/category here... 

private: 
    string title; 
    int category; 
}; 

如果你願意,你也可以使用類的enum,但如果你有一個已知的有限的類別集合只會工作。如果您希望將來可能擴展您的類別集,或者您不確定,請繼續使用int。雖然如果你這樣做,我建議你改稱categoryId

0

我認爲如果構造函數使用整數category,例如通過使用stringstream轉換爲整數更好。

並假設每部影片總有類別編號就可以繞過檢查數量如下圖所示:

while(getline(book_input,title)){ 
    getline(book_input,strNumber); 
    stringstream ss(strNumber); 
    int number; 
    ss>>number; 
    Book aBook(title,number); 
    // code to process aBook 
} 
相關問題