您的位置:首页 > 其它

随机字符串

2016-02-03 23:00 246 查看
资料1来源:
http://zhidao.baidu.com/link?url=dcVL1oNt7OH6X25SBHUefIKNtfHuEkuWr95HMPVLsQtSPjqKfEhyv82HE6sNzz8EOnsJppjNaSPXYLR8jqFOq_
直接产生随机的字符串的库函数是没有的,但是可以这么实现:

1.产生固定长度的随机的字符串

主要就是产生固定个数的随机字符,

那么就简单了,用两组随机数:

一组:随机产生0~25的整数num,然后用’a’+num来赋值小写字母,’A’+num来赋值大写字母

一组:随机产生0,1,产生0,用’a’来和num相加,生成小写字母;产生1,用’A’来和num相加,生成大写字母;

2.产生不固定长度的随机的字符串

就是在上面的产生固定长度的随机的字符串的基础上,在引入一组随机数,来控制字符串长度

代码如下:

//产生固定长度的随机的字符串
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define N 10//固定长度为10

void main()
{
int flag,charLengt;
int i,j,k=0;
char ch[N+1]={NULL};
srand((unsigned)time(NULL));

for(i=0;i<10;i++)//生成10个String
{
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;
printf("%s\n",ch);
}

}


资料2来源:
http://blog.csdn.net/wangchangshuai0010/article/details/17188417
//产生长度为length的随机字符串
char* genRandomString(int length)
{
int flag, i;
char* string;
srand((unsigned) time(NULL ));
if ((string = (char*) myMalloc(length)) == NULL )
{
myLog("Malloc failed!flag:14\n");
return NULL ;
}

for (i = 0; i < length - 1; i++)
{
flag = rand() % 3;
switch (flag)
{
case 0:
string[i] = 'A' + rand() % 26;
break;
case 1:
string[i] = 'a' + rand() % 26;
break;
case 2:
string[i] = '0' + rand() % 10;
break;
default:
string[i] = 'x';
break;
}
}
string[length - 1] = '\0';
return string;
}


关于strand(time(null)) 资料来源:
http://zhidao.baidu.com/link?url=83y2wU6uazUagHHieLfT2k568Qp_A4obFq4Uu18TbrCLT3HDslTWZJIkyvra4Bz-lU32Vl24LvteIo11lk8pJa
在C语言中获取随机数的函数是rand();

一个合格的随机数值必须由获取到的值足够散列,以及值不可预知的特性,但如果不做任何处理直接调用rand(),那么得到的值是固定的。下面是一个例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
for(i = 0; i < 10; i ++)
printf("%d\n", rand());//获取10次随机数并打印。

return 0;
}


运行这个程序,看起来没什么问题,因为获取到的10个数字都是散列的,很有随机数的感觉。但重复运行这个程序就会发现,每次运行得到的十个数都是同样的,这个并不符合不可预知的特性。

所以C语言中的随机数函数rand()被称为伪随机数。

通过srand函数,可以让这个伪随机数更“真”一些,它的原理是设置一个随机数种子,然后后续的随机数依赖于种子值。

#include <stdio.h>
#include <stdlib.h>
int main() {
for(i = 0; i < 100000; i += 10000)
{
srand(i);
printf("%d\n", rand());//获取10次随机数并打印。
}

return 0; }


反复运行这个程序,会发现,相同的随机数种子获取到的随机数值同样是相同的。这样这个随机数种子值又不能是固定值了,于是需要想办法让这个种子值有变化。

让这个值有变化的方法有很多种,最常用的就是通过时间函数time()。这个函数是获取当前时间值的,单位是毫秒。通常的调用方式是
time(NULL);


用这个值来做随机数种子可以让每次调用得到的种子值不同,因为要达到完全相同的效果,必须要在毫秒级的相同时间下同时执行,这个概率太低了。

于是time(NULL)就成了最常用的随机数种子。

以上就是
srand(time(NULL));
经常放在随机数发生前作为随机数种子的原因了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: