gpt4 book ai didi

c++ - 为什么我的随机字符串生成器生成的字符串太短?

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:41 24 4
gpt4 key购买 nike

我编写了一个返回随机字符串的简单函数。

std::string cache::generateCacheName()
{
static const char pool[] = "0123456789abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string r;
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> distr(0, sizeof(pool) - 1);
for (int i = 0; i < 48; i++)
r += pool[distr(eng)];
return r;
}

但是,有时它会随机返回一个短于 48 个字符的字符串。

我已经在 sizeof(pool) 后面添加了 - 1 试图避免从 pool 添加空终止符,但这并没有'改变任何东西。

我哪里出错了?

最佳答案

a) 给定一个字符串文字“123”,大小为 4,因为它是一个包含 4 个常量字符的数组,包括空值。

b) 当你从那个尺寸中减去 1 时,你得到 3。

c) 当你有一个包含 3 个元素的数组时,第 3 个元素位于偏移量 2。

d) std::uniform_int_distribution 在闭区间 [a,b] 上定义。也就是说,并包括两个端点形成 a 到 b。

e) 当您选择一个随机数并且它恰好是该间隔中的最大值(在本例中为 3)时,您从池中获取尾随的空字节并将其插入到您的字符串中。您可能希望最大值为 2,而不是 3。

因此,如果恰好选择了分布中最大的数字,则您的字符串很短。也许您的代码使用 strlen(pool)-1 会更清晰,只要它不为空即可。

关于c++ - 为什么我的随机字符串生成器生成的字符串太短?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com