gpt4 book ai didi

c++ - 随机字符串生成器c++

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:34 27 4
gpt4 key购买 nike

我想生成没有重复的字符串列表,如下所示

A1, A2, A3, A4, B1, B2, B3, B4, C1, C2, C3, C4

这是我生成字符串列表的方式

std::string columns[] ={"A","B","C"};
std::string rows[]={"1","2","3","4"};
std::string columnsAndRows;

for(int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
columnsAndRows=columns[i]+row[j];
//possible to do something like this?
columnAndRows.rand();
}
}

但问题是,我阅读了有关 rand() 的文章,它返回一个介于 0 和 RAND_MAX 之间的伪随机整数。我应该怎么做才能根据我的期望生成随机字符串?

最佳答案

使用 std::rand与模数 might not be a good idea .相反,您可以轻松构建一个 std::vector 可能的元素并做一个 std::random_shuffle 在那个容器上:

std::vector<std::string> cols = {"A", "B", "C"};
std::vector<std::string> rows = {"1", "2", "3", "4"};
std::vector<std::string> vec;
for (auto i : cols)
for (auto j : rows)
vec.emplace_back(i + j);
std::random_shuffle(vec.begin(), vec.end());

这是 running代码结果。


正如 DyP 所暗示的那样, std::random_shuffle可能会使用 rand在它的实现中(事实是它是由实现定义的)因此你可能会遇到不断得到相同结果的问题,因为你没有为随机函数设置种子。

幸运的是 C++11 引入了 std::shuffle这允许我们传递第三个参数并定义我们自己的随机生成器仿函数。这样做的好处是我们可以轻松使用 <random>为这个论点提供支持:

std::mt19937 rand_func(std::random_device{}());
std::shuffle(vec.begin(), vec.end(), rand_func);

这是 running代码结果。

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

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