c++ - 如何在每次执行中生成随机字符串(下一个必须不同于上一个)?
问题描述
我有以下代码,每次执行程序时只生成一个固定字符串,已经在 2 台计算机上测试过,并且总是生成相同的字符串。那么如何在每次执行中生成不同的字符串呢?
void gen_random(char *s, const int len) {
static const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < len; ++i) {
s[i] = alphanum[rand() % (sizeof(alphanum)-1)];
}
s[len] = 0;
}
// int _tmain(int argc, _TCHAR* argv[])
char str[MAX_PATH];
gen_random(str, 10);
解决方案
rand
通常是一个伪随机数生成器。数字序列完全由 PRNG 的种子确定,如 设置srand
。由于您没有明确设置种子,因此您总是得到相同的种子,因此得到相同的序列。
请注意,较新的<random>
标头具有更好的解决方案 - 更好的算法、更好的播种、更多的范围、更多的分布......
推荐阅读
- typescript - Typescript 类型运算符:将对象类型转换为联合
- java - Netty获取客户端绑定的主机和端口
- linux - vagrant 命令中的反引号
- uml - 如何正确绘制具有访问限制的用例图?
- sql - SQL Server:使用 CTE 行分区序列化顺序时间戳
- r - 如何在单个图上为随机福雷斯特、决策树和逻辑回归绘制 ROC 曲线
- node.js - 在 aws lambda nodejs 函数中获取音频持续时间
- sass - 为什么我的小图像是全屏宽度,即使我的 scss 文件中没有标记表明如此?
- proof - 证明数据类型之间转换的正确性
- sql - Sql Performance join Vs co-related Subquery