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。
发布于 2018-12-27 11:38:37
确定性程序不能自然地产生随机性。我们需要从其他地方获得这种随机性。在过去的rand()中,我们通常会使用std::time(NULL)的结果https://en.cppreference.com/w/cpp/numeric/random/srand RNG,以便在每次运行时生成不同的状态。
现在,我们使用提供的“更随机”的工具。
从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';
}还有塔达亚!随机字母生成器:)
https://stackoverflow.com/questions/53944238
复制相似问题