首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成随机字母

生成随机字母
EN

Stack Overflow用户
提问于 2018-12-27 11:22:05
回答 1查看 137关注 0票数 0
代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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也是一个整数类型。让我们稍微调整一下他们的例子:

代码语言:javascript
复制
#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';
}

还有塔达亚!随机字母生成器:)

现场演示

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53944238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档