对于我即将开展的计算机科学课程,我们必须制作星球大战问答游戏。这是项目描述:
文件star_wars.txt包含字符'名字和他们最初出现的剧集(这是根据发行日期的时间顺序 - 4,5,6,1,2,3)。您将使用star_wars.txt的内容填充名为cast的向量。投射向量是Character类型。 Character类具有与star_wars.txt文件匹配的属性:名字,姓氏,剧集。该程序将询问用户该角色首次出现的剧集。告诉用户他们是否正确或不正确。跟踪他们获得的正确数量,并根据他们的分数给他们排名。
star_wars.txt示例:
阿克巴海军上将6 Lando Calrissian 5
等...
如何将此文件放入向量中,并在询问问题时仅显示名字和姓氏?
这是我到目前为止所做的:
#include<iostream>
#include<vector>
#include<string>
#include<fstream>
using namespace std;
class Character
{
private:
int score;
int episode;
int guess;
public:
void readIn(vector<Character>&cast);
void readOut();
string first;
string last;
};
int main()
{
Character ch;
vector<Character> cast;
cout<<"Welcome to the star wars quiz! I will tell you a character and you have to tell me what episode they first appeared in. Lets play!"<<endl;
ch.readIn(cast);
cout<<ch.first<<endl;
return 0;
}
void Character::readIn(vector<Character>&cast)
{
ifstream myFile("star_wars.txt");
while ( !myFile.eof() )
{
myFile>>first;
}
}
答案 0 :(得分:1)
我只会阅读输入内容。显示应该足够简单,可以自己搞清楚。
您可以为operator >>
课程创建Character
:
#include <istream>
#include <string>
class Character
{
private:
int score;
int guess;
public:
friend std::istream& operator>>(std::istream& is, Character& ch);
std::string first;
std::string last;
int episode;
};
std::istream& operator>>(std::istream& is, Character& ch)
{
is >> ch.first >> ch.last >> ch.episode;
return is;
}
一旦你有了这个,那么你可以使用>>
输入一个角色,如下所示:
int main()
{
Character ch;
cin >> ch;
}
请注意,我已将episode
移至public
部分,但您应该为这些项目提供公开get
和set
功能,并将这些成员放置在private
部分。
此外,您不需要班级中的矢量。你想要做的是有一种方法将项目输入到课外的矢量中。你可以做很多事情:
int main()
{
std::ifstream ifs("myinputfile.txt");
std::vector<Character> vCh;
while (ifs)
{
Character ch;
ifs >> ch; // read a line into ch
vCh.push_back(vCh); // add this to the vector
}
}
或者复杂的方式:
#include <iterator>
//...
int main()
{
std::ifstream ifs("myinputfile.txt");
std::istream_iterator<Character> fileStart(ifs), fileEnd;
std::vector<Character> vCh(FileStart, fileEnd);
}
请注意,上面的示例显示了输出operator >>
和operator <<
的重载。我不会仔细考虑它的作用,但是你可以自己研究一下是做什么的。