string bolsa_letras::letters_generator(int quantity){
    int already_generated = 0;
    map<char, int> aux = values;
    string out;
    while(already_generated != quantity){
        char generated_char = 'A' + rand()%26;
        if(aux[generated_char] > 0){
            out.push_back(generated_char);
            aux[generated_char]--;
            already_generated++;
        }
    }

    return out;
}


上面是给定数字生成随机字母的代码。

该地图会保存字母和出现字母的时间。问题在于,每次我运行代码时,它都会打印出相同的内容:NLRBBMQH。为什么会这样呢?

我为rand函数包含了cstdlib。

最佳答案

确定性程序不能自然地产生随机性。我们需要从其他地方获得这种随机性。在rand()的过去,通常我们将seed RNGstd::time(NULL)的结果在每次运行时产生不同的状态。

如今,我们使用<random>提供的“更随机”的工具。

cppreference.com's documentation on std::uniform_int_distribution中,您可以找到int类型整数的示例。现在,char也是整数类型。让我们稍微调整一下他们的示例:

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;  // Will be used to obtain a seed for the random number engine
    std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd()
    std::uniform_int_distribution<char> dis('A', 'Z');

    for (int n=0; n<10; ++n) {
        std::cout << dis(gen) << ' ';
    }
    std::cout << '\n';
}


和taadaaaa!一个随机字母生成器:)

Live demo

关于c++ - 产生随机字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53944238/

10-12 00:12
查看更多