你如何从C ++文件中读取一个单词?

时间:2009-03-09 06:56:21

标签: c++ file input

所以我感到无聊,并决定我想做一个刽子手游戏。当我第一次使用C ++时,我在高中时做过这样的作业。但这是在我几乎没有几何形状之前,所以不幸的是我在形状或形式上没有做得很好,在学期之后我把所有的东西都变成了愤怒。

我正在制作一个txt文档,只是抛出一大堆文字 (即: 测试 爱 hungery flummuxed 搞乱 馅饼 尴尬 您 得到 该 理念 )

所以这是我的问题: 如何让C ++从文档中读取随机单词?

我有一种感觉需要#include<ctime>,以及srand(time(0));来获得某种伪随机选择...但我对于如何从一个随机的单词中取出来说并不是最模糊的一个文件......有什么建议吗?

提前致谢!

3 个答案:

答案 0 :(得分:7)

这是一个粗略的草图,假设单词由空格(空格,制表符,换行符等)分隔:

vector<string> words;
ifstream in("words.txt");
while(in) {
  string word;
  in >> word;
  words.push_back(word);
}

string r=words[rand()%words.size()];

答案 1 :(得分:1)

运营商&gt;&gt;用于字符串将读取1(白色)空格分隔的字。

所以问题是你是想在每次选择一个单词时读取文件,还是想将文件加载到内存中,然后从内存结构中获取单词。没有更多信息,我只能猜测。

从文件中选择一个Word:

// Note a an ifstream is also an istream. 
std::string pickWordFromAStream(std::istream& s,std::size_t pos)
{
    std::istream_iterator<std::string> iter(s);
    for(;pos;--pos)
    {    ++iter;
    }

    // This code assumes that pos is smaller or equal to
    // the number of words in the file
    return *iter;
}

将文件加载到内存中:

void loadStreamIntoVector(std::istream& s,std::vector<std::string> words)
{
    std::copy(std::istream_iterator<std::string>(s),
              std::istream_iterator<std::string>(),
              std::back_inserter(words)
             );
}

生成随机数应该很容易。假设你只想要psudo-random。

答案 2 :(得分:0)

我建议在记事本中创建纯文本文件(.txt),并使用标准C文件API(fopen()fread())从中读取。您可以使用fgets()一次读取每一行。

获得纯文本文件后,只需将每行读入数组,然后使用上面建议的方法随机选择数组中的条目。