随机字符串
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.产生不固定长度的随机的字符串
就是在上面的产生固定长度的随机的字符串的基础上,在引入一组随机数,来控制字符串长度
代码如下:
资料2来源:
http://blog.csdn.net/wangchangshuai0010/article/details/17188417
关于strand(time(null)) 资料来源:
http://zhidao.baidu.com/link?url=83y2wU6uazUagHHieLfT2k568Qp_A4obFq4Uu18TbrCLT3HDslTWZJIkyvra4Bz-lU32Vl24LvteIo11lk8pJa
在C语言中获取随机数的函数是rand();
一个合格的随机数值必须由获取到的值足够散列,以及值不可预知的特性,但如果不做任何处理直接调用rand(),那么得到的值是固定的。下面是一个例子:
运行这个程序,看起来没什么问题,因为获取到的10个数字都是散列的,很有随机数的感觉。但重复运行这个程序就会发现,每次运行得到的十个数都是同样的,这个并不符合不可预知的特性。
所以C语言中的随机数函数rand()被称为伪随机数。
通过srand函数,可以让这个伪随机数更“真”一些,它的原理是设置一个随机数种子,然后后续的随机数依赖于种子值。
反复运行这个程序,会发现,相同的随机数种子获取到的随机数值同样是相同的。这样这个随机数种子值又不能是固定值了,于是需要想办法让这个种子值有变化。
让这个值有变化的方法有很多种,最常用的就是通过时间函数time()。这个函数是获取当前时间值的,单位是毫秒。通常的调用方式是
用这个值来做随机数种子可以让每次调用得到的种子值不同,因为要达到完全相同的效果,必须要在毫秒级的相同时间下同时执行,这个概率太低了。
于是time(NULL)就成了最常用的随机数种子。
以上就是
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));经常放在随机数发生前作为随机数种子的原因了。
相关文章推荐
- 基于MTD的NANDFLASH设备驱动底层实现原理分析(二)
- 失效模型定义
- [Möbius]个人对Möbius反演的理解
- leetcode之Best Time to Buy and Sell Stock
- PHP---语法笔记
- 从历年高考录取率看中国本科学历的含金量
- 服务器搭建局域网访问
- leetcode 326 Power of Three(难易度:Easy)
- Java中上传文件到服务器端
- 最简单的基于FFmpeg的AVDevice例子(读取摄像头)
- JAVA中的命名规范
- Cocos2d-x Text的使用
- 前端入门与深入学习必要了解的网站分享
- 蚂蚁(Ants,NEERC 2008,LA4043)
- Vijos P1062迎春舞会之交谊舞
- 算法训练 未名湖边的烦恼
- SAE: Python Django 如何 syncdb 到线上数据库
- 是 WordPress 让 PHP 更流行了 而不是框架
- 日期选择器DatePickerDialog
- 首篇博文