文件到阵列到结构

时间:2016-05-31 03:10:36

标签: c++ arrays struct

我正在制作这个有助于管理DVD租赁商店的计划。我要做的是采取包含DVD等信息的文本:

平均女孩;喜剧; PG; 2009年;里贾纳乔治;二〇一五年十二月七日;

召唤;恐怖; R等2013;萨拉约翰逊; 2016年5月16日;

Pokemon 2000;儿童; G; 2000; Ash Katchem; 2016年4月15日; 等。

然后获取此信息,然后将其读入数组,然后将数组读入结构中,然后以正确的顺序显示: 姓名:贱女孩 类型:喜剧 评级:PG

等等......

到目前为止,这是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

struct dvd{
        string name;
        string genre;
        string rating;
        string released;
        string renter;
        string rentday;

        void print();
        bool read(ifstream & file);

};

void dvd::print(){
        cout <<"Title: " << name << endl;
        cout <<"Genre: " << genre << endl;
        cout << "Rating: " << rating << endl;
        cout << "Release date: " << released << endl;
        cout << "Name of renter: " << renter << endl;
        cout << "Date rented: " << rentday << endl;
    }
bool dvd::read(ifstream & file)
{
    getline(file, name, ';');
    getline(file, genre, ';');
    getline(file, rating,';');
    getline(file, released, ';');
    getline(file, renter, ';');
    getline(file, rentday, ';');
    return file.good();
}
int main() {
    vector<dvd> dvds;
    dvd         dvd1;
    ifstream file("DVD.txt");

    if(! file.is_open()){
        cout << "Failed to find input file" << endl;
        return 1;
    }
    while(dvd1.read(file))
    { dvds.push_back(dvd1);
    }

    dvd1.print();


return 0;

}

所以我想要做的是将文本文件读入数组,并从那里读取数组到结构中。因此,不是文本文件读入向量而是我需要它读入数组并从那里读取数组的第一行(dvdArray [1])到struct dvd然后使用print函数打印出该信息然后循环直到dvdArray [10]被读入struct dvd!

非常感谢你的帮助! :)

2 个答案:

答案 0 :(得分:1)

更改

bool dvd::read(ifstream & file)

bool dvd::read(istream & file)

不需要对其内容进行其他更改。

然后,取出每一行并将其放入std::istringstream,然后将其传递给dvd::read

你应该能够自己弄明白其余部分。

答案 1 :(得分:0)

为了简单地读取和写入文件,我建议为您的struct类重载"ratings" : [chosenArray]<<,以便使代码易于以可读的方式序列化和反序列化。

>>

然后,

friend std::ostream& operator<< (std::ostream& stream, const dvd& dvdObj) 
{
  // your output stuff
  // stream <<"Title: " << dvdObj.name << endl;
  // ...
  return stream;
}

friend std::istream& operator>> (std::istream& stream, dvd& dvdObj) 
{
   // your output stuff
  // getline(stream, dvdObj.name, ';');
  // ...
  return stream;
}

// look for std::copy for reading directly into vector ... else 
while( file >> dvd1 )
{ 
   dvds.push_back(dvd1);
}