void randompas(char out[], int count)
{
// 26+26+20=72
char upper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
char lower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char number[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
char symbol[] = {'!', '@', '#', '$', '%', '^', '&', '_', '+', '='};
srand((unsigned)time(NULL));
for (int i = 0; i < count; i++)
{
int index = rand() % 72;
if (index >= 0 && index < 26)
{
out[i] = upper[index];
}
if (index >= 26 && index < 52)
{
out[i] = lower[index - 26];
}
if (index >= 52 && index < 62)
{
out[i] = number[index - 52];
}
if (index >= 62 && index < 72)
{
out[i] = symbol[index - 62];
}
}
}
PS.1 上面randmpas和图片内容实际有些不一样,减少了几个字符
PS.2 只是按着思路去编写,一开始并没有考虑到直接将字符串看作字符数组
PS.3 在很短的时间内运行这段程序得到的结果是一样的,这个是生成随机数的方法的问题
//以下是优化后的结构
void randompas(char out[], int count)
{
// 合并字符集
char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
"!@#$%^&_+=";
int charsetSize = sizeof(charset) - 1; // 不包括最后的空字符
srand((unsigned)time(NULL));
for (int i = 0; i < count; i++)
{
int index = rand() % charsetSize;
out[i] = charset[index];
}
out[count] = '\0'; // 确保结果以空字符结尾
}