繁体   English   中英

如何从 C++ 的文件中读入一个单词?

[英]How do you read a word in from a file in C++?

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

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

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

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

提前谢谢!

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

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

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

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

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

从文件中选择一个单词:

// 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;
}

将文件加载到 memory 中:

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。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM