1、简要说明
项目上开发要用到随机生成一个8位长的字符串(类似Java工具类中的UUID),作为id来对同一事物的不同个体进行唯一标识,如同一个班级里学生名字几乎不同,偶尔会有重复(小王、小红、小明…)。初中的小明非常忙,书中和试卷中总有Ta。现在好了,课程多了,作业多了,小明更忙了,哈哈~
既然是随机的,自然可以应用到C语言库中的rand()随机函数,通过数字的巧妙处理实现字符串的随机,代码如下。
2、示例代码
#include <string>
#include <time.h>
#include <stdlib.h>
#include <Windows.h>
#include <iostream>
using namespace std;
#define STRINGLEN 8
void GetRandomString(int nStrLen, string &strData)
{
for(int i=0; i<nStrLen; i++)
{
switch((rand()%3))
{
case 0:
strData += ('0'+rand()%10);
break;
case 1:
strData += ('a'+rand()%26);
break;
case 2:
strData += ('A'+rand()%26);
break;
default:
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
string strData = "";
for(int i=1; i<=20; i++)
{
strData = "";
GetRandomString(STRINGLEN, strData);
cout << strData << " ";
if(0 == (i%4))
{
cout << endl;
}
}
getchar();
return 0;
}
3、运行结果
结果显示字符串随机生成成功,需要的注意的是,如果将srand()函数放在GetRandomString()函数中,则运行结果全部是一样的,如下所示。
void GetRandomString(int nStrLen, string &strData)
{
srand((unsigned int)time(NULL));
for(int i=0; i<nStrLen; i++)
{
}
}
int main()
{
string strData = "";
for(int i=1; i<=20; i++)
{
}
getchar();
return 0;
}
这是由于程序运行太快(不超过一秒),srand()函数的种子值是秒,在一秒内种子没变化,因此rand()生成的随机数序列未变化,每次调用GetRandomString()的结果都是一样的,可以在for()循环体最后一行加上Sleep(1000)就好了。
for(int i=1; i<=20; i++)
{
Sleep(1000);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)