2

所以我觉得无聊,决定做一个刽子手游戏。当我第一次学习 C++ 时,我在高中时做过这样的作业。但这是在我还没有学过几何之前,所以不幸的是我在它的任何形状或形式上都做得不好,学期结束后我一怒之下把所有东西都扔掉了。

我正在寻找一个 txt 文档,然后输入一大堆单词(即:测试爱饥饿的混乱混乱的馅饼尴尬你明白了)

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

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

提前谢谢!

4

3 回答 3

7

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

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

string r=words[rand()%words.size()];
于 2009-03-09T07:07:58.030 回答
1

字符串上使用的运算符 >> 将从流中读取 1 个(空白)空格分隔的单词。

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

从文件中选择一个单词:

// 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。

于 2009-03-09T07:37:48.910 回答
0

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

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

于 2009-03-09T07:00:50.013 回答