解析文本文件,创建歌曲类的新实例,并将歌曲添加到矢量<song *> </song *>

时间:2010-12-03 16:50:31

标签: c++

我在大约一周前问过这个问题。之前所说的话让我陷入了许多问题,因为我忘了提一些东西。

问题是我有一个包含数百行的文本文件:

song_number | song_title | song_release_date || 忽略这一个 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0

数字代表这首歌的音乐类型。如果有1则代表某种类型,如果为0则不代表该类型。例如,(0)的类型对于每首歌曲是相同的并且与其他类型相同。

现在我需要创建一个歌曲类的新实例,其中包含以下参数:

(int song_number,string title,string release_date,vector genres)

我希望在1函数中解析文本文件,该函数创建歌曲类的新实例,然后将其添加到Song类型的向量中。

这个想法是我可以根据歌曲编号访问任何歌曲,所以我可以做类似的事情 songHolder-&GT;在(100) - &GT; get_song_title();

谢谢!

1 个答案:

答案 0 :(得分:1)

你需要做几件事:

1)定义歌曲类

class Song { /* STUFF */ }

2)定义一个输入(可能还有一个输出迭代器

std::istream& operator>>(std::istream& input, Song& data)        { /* STUFF */ }
std::ostream& operator<<(std::ostream& output, Song const& data) { /* STUFF */ }

3)然后你只需要使用流操作符从文件中读取数据。

std::vector<Song>   songHolder;
std::ifstream       file("FileName");
Song                tmp;
while (file >> tmp)
{
    songHolder.push_back(tmp);
}

4)现在你应该可以访问载体中的歌曲了:

std::cout << songHolder.at(100).get_song_title();
// or just dump the song
std::cout << songHolder.at(100);