有什么方法可以制作一个程序,随机选择10-20个字符串并用C++向用户显示



好吧,所以我想制作一个有助于我学习的程序。我的想法是基于闪存卡和随机数生成器。由于我在C++中还有很多东西要学,我想知道有什么好的方法或例子可以实现我的目标。

我希望程序从预定义的列表中向用户输出一个随机字符串,并在重新开始之前遍历所有定义的字符串。

简单地说。。。为了让"生成器"以随机顺序遍历预定义的字符串,我需要做什么?

这样的程序由三部分组成:

  • 获取问题

这些问题必须放在一个类似的文件中

What is the capital of Arkansas? Little Rock

将它们全部放在一个文本文件中,每行一个。将它们读入字符串数组中,如下面的答案所示。

  • 打印出数组中的随机问题并接受输入

不要忘记根据?的位置将其分为问题和答案。这意味着你只需要一个?每个问题。如果答案符合?之后的答案?,增加正确的计数器。无论哪种方式,增加您的总计数器。

  • 比较结果

最后,给用户一个报告,告诉他们有多少是对的或错的。

每一个都是简单的问题,你可以一次解决一个,直到你有了完整的解决方案。:-)

完成后,查看

如果要按随机顺序遍历所有字符串,一种方法是生成一组从0N-1的索引作为std::vector<size_t> idx,使用std::shuffle对向量idx进行混洗,然后使用混洗后的向量循环遍历字符串向量。

这里有一个简单的例子来说明它是如何工作的:

#include <iostream>
#include <random>
#include <algorithm>
#include <numeric>
#include <utility>
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::vector<std::pair<std::string, std::string>> qa
    {
        {"Capital of US", "Washington"},
        {"The baby in Family Guy", "Stewie"},
        {"Capital of Texas", "Austin"}
    };
    std::vector<std::size_t> idx(qa.size());
    std::iota(idx.begin(), idx.end(), 0u); // generate indexes
    std::shuffle(idx.begin(), idx.end(), gen); // shuffle the indexes
    // now display the elements in random order:
    for (std::size_t i = 0; i < qa.size(); ++i)
    {
        std::cout << qa[idx[i]].first << ": "
                  << qa[idx[i]].second << std::endl;
    }
}

CCD_ 7保证了在所有可能的排列上的均匀分布。

最新更新