赞
踩
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));//设置随机数种子,NULL:从1970-01-01 00:00:00到现在的秒数 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));//设置随机数种子,NULL:从1970-01-01 00:00:00到现在的秒数 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);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。