c ++什么是从文本文件中读取的好方法?

时间:2011-05-28 08:17:32

标签: c++

文本文件内部

- 启动文本文件----

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

这是存储它的好方法吗?

3 个答案:

答案 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
 }