随机生成指定位数字符串

#include<string>
#include<mutex>

std::string gen_random_string(int length)
{
    static const char char_space[] =
        "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    static std::once_flag once;
    static const size_t len = strlen(char_space);
    static const int rand_max = RAND_MAX - (RAND_MAX % len);
    std::call_once(once, []() {
        std::srand(static_cast<unsigned int>(time(nullptr)));
        });

    std::string str;
    str.resize(length);

    for (int i = 0; i < length; ++i){
        int x = std::rand();
        while (x >= rand_max){
            x = std::rand();
        }

        x = (x % len);
        str[i] = char_space[x];
    }

    return str;
}

//改进版的随机生成字符串函数

std::string gen_random_string(int length)
{
    static const char char_space[] =
        "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    static std::once_flag once;
    static const size_t len = strlen(char_space);
    static std::mt19937 rng;
    std::uniform_int_distribution<std::mt19937::result_type> distace(0, len -1);

    std::call_once(once, [&]() {
        rng.seed(std::random_device()());
        });

    std::string str;
    str.resize(length);

    for (int i = 0; i < length; ++i){
        int x = distace(rng);
        x = (x % len);
        str[i] = char_space[x];
    }

扫描二维码关注公众号,回复: 13145267 查看本文章

    return str;
}
 

猜你喜欢

转载自blog.csdn.net/qq_53332653/article/details/115324578