文本文件内部
- 启动文本文件----
Physics 0 Chemistry 1 English 2
----文本文件结束
class Book { private: string title; int category; };
1) 我想将物理,化学,英语存入标题; 和0,1,2到一个类别;
离, 物理学是0类 化学是第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); }
这是存储它的好方法吗?
答案 0 :(得分:4)
这似乎是一个合理的开始,但你的阅读代码应该是:
while( getline(book_input, title, '\n') && getline(book_input, number, '\n') ) {
Book abook(title, number);
// do something with abook
}
请勿对eof
进行测试,原因请参见this link。
每本书在阅读时都必须做一些事情,而图书构造函数必须将其第二个参数从字符串转换为int。
答案 1 :(得分: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
。
答案 2 :(得分: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
}