【问题标题】:How do you read a word in from a file in C++?如何从 C++ 文件中读入一个单词?
【发布时间】:2010-10-12 03:12:48
【问题描述】:

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

我正在寻找一个 txt 文档,然后输入一大堆单词 (IE: 测试 爱 饿了 混乱的 混乱的 馅饼 尴尬的 你 得到 这 主意 )

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

我感觉需要#include<ctime> 以及srand(time(0)); 来获得某种伪随机选择...但我对如何从文件中获取随机单词还不是很清楚。 .有什么建议吗?

提前谢谢!

【问题讨论】:

    标签: c++ file input


    【解决方案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。

    【讨论】:

      【解决方案2】:

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

      vector<string> words;
      ifstream in("words.txt");
      while(in) {
        string word;
        in >> word;
        words.push_back(word);
      }
      
      string r=words[rand()%words.size()];
      

      【讨论】:

      • 一定要#include .
      • 明白了......所以'in'和'infile'一样吗?还是那两个不同的东西?
      • 只是出于好奇和我以前从未见过的事实,push_back() 在做什么?恐怕我以前没见过那个命令
      • 它将值插入到向量的末尾。还有一个 push_front。
      • std::vector 的 push_back 成员函数在向量末尾添加一个元素(在本例中为字符串)。
      【解决方案3】:

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

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

      【讨论】:

      • 并不意味着我想使用 word,.txt 是意图。我试图在每个示例之间放置一条新线,但它似乎不起作用。你能解释一下你的意思吗?我看了这两个链接,但我不太明白。
      • 您可能会发现 TrayMan 发布的 iostream 示例比 C API 更易于使用。我想我不能在这个小盒子里解释它。
      • 注意记事本不一定要保存为 ASCII 格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多