随机字符串

资料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)); 经常放在随机数发生前作为随机数种子的原因了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值