读书人

如何才能产生1个真正随机的字符串

发布时间: 2013-09-26 10:32:35 作者: rapoo

怎么才能产生1个真正随机的字符串
网上搜寻的代码,每次生成的都是一样的,譬如

//产生随机字符串,len 表示长度。最长200.
char* GeneratesStr(char* str,int len)
{
int flag ; //生成的字符大写,还是小写。
int N = len;
int j,k=0;
//char ch[N+1]={NULL};
char ch[200];
//srand((unsigned)time(NULL));
for(j=0;j<N;j++)
{
flag=rand()%2;
if(flag) ch[k++]='A'+rand()%26;
else ch[k++]='a'+rand()%26;
}
ch[k]='\0';
k=0;
strcpy(str,ch);
return str;
}

我想要一份真正产生随机字符串的代码啊。每次产生的都不同的!
[解决办法]
产生随机数之前先初始化就可以了

srand(time(0));
[解决办法]
rand使用时需要初始化
srand((UINT)time(NULL));
[解决办法]
srand((UINT)time(NULL));
这行代码是产生一个随机种子;
rand()是根据这个随机种子产生随机数。

如果每次随机种子一样,那么rand()产生的随机数也一样。

[解决办法]
都看到问题了,蹭个分吧
[解决办法]
真正的随机是违背函数的属性的,
所以,用时间做种子。接分。
[解决办法]
要做到像自然界那样真正的随机, 是不可能的. 除非是有专门的硬件支持.
现在系统中的随机数都是一些算法生成的, 只是伪随机数.

//srand((unsigned)time(NULL)); 你把这句加上, 每次得到的串就应该不同了, 当然, 两次之间如果太短, 比如 time(NULL)两次得到的是同一个种子, 那么就可能会相同了.

也可以加更多的参数:
srand((unsigned)time(NULL)+ rand());

如果这样还不满意, 还可以在函数中增加一个静态变量. 每调用一次就自增,

static int val = rand();
++val;
srand((unsigned)time(NULL)+ rand()+val); 这样就不会再有两次调用会有相同的串了情况了.

读书人网 >VC/MFC

热点推荐