如何将文件中的单词输入到类类型的向量中?

时间:2016-04-15 00:41:52

标签: c++ vector

对于我即将开展的计算机科学课程,我们必须制作星球大战问答游戏。这是项目描述:

  

文件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;
  }
}

1 个答案:

答案 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部分,但您应该为这些项目提供公开getset功能,并将这些成员放置在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);
}

Here is a live example

请注意,上面的示例显示了输出operator >>operator <<的重载。我不会仔细考虑它的作用,但是你可以自己研究一下是做什么的。