Visual C++ 6.0生成随机字符2
函数名:randommakes(char *optionsnumber)
optionsnumber形参参数:
T | 生成一个大写字母 | t | 生成一个小写字母 |
N | 生成一个数字 | n | 生成一个数字 |
S | 生成一个符号 | s | 生成一个符号 |
G | 随机生成一个大、小写字母或数字 | g | 随机生成一个大、小写字母或数字 |
M | 随机生成一个大写字母或数字 | m | 随机生成一个小写字母或数字 |
X | 随机生成一个字符(大小写字母、数字、符号) | x | 随机生成一个字符(大小写字母、数字、符号) |
NULL | 未指定生成的字符格式 | "" | 未指定生成的字符格式 |
该函数只根据形参参数字符的个数进行生成随机数,代码相对比上一篇的随机数函数稍微精简一些,功能基本一样
函数原型:
#include <stdlib.h>
#include <time.h>
char *randommakes(char *optionsnumber)
{
srand((unsigned)time(NULL));//复位和初始化随机状态
int optionsnumbers=0;//记录参数的个数
int branchselect;//随机分支选择
char *randomsuc;//存储随机生成的字符
randomsuc=(char *)malloc(sizeof(char));
while(1)//随机生成字符的while循环
{
if(optionsnumbers>2700)
{
printf("Options Out!\n");
randomsuc=NULL;
break;
}
else if(optionsnumber[optionsnumbers]=='\0')//判断形参是否结束了
{
randomsuc[optionsnumbers]='\0';//在randomsuc变量末尾加入结束符'\0'
break;
}
else
{
switch(optionsnumber[optionsnumbers])//根据提取的形参选择分支
{
case 'T':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case 't':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case 'S':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
case 's':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
case 'N':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case 'n':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case 'G':
branchselect='1'+ rand()%3;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'g':
branchselect='1'+ rand()%3;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'M':
branchselect='1'+ rand()%2;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'm':
branchselect='1'+ rand()%2;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'X':
branchselect='1'+ rand()%4;
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case '4':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
}
break;
case 'x':
branchselect='1'+ rand()%4;
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case '4':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
}
break;
default:
randomsuc[optionsnumbers]=optionsnumber[optionsnumbers];
break;
}
optionsnumbers++;
continue;
}
}
return(randomsuc);
free(randomsuc);
}
调用示例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char *randommakes(char *optionsnumber);
void main()
{
while(1)
{
printf("%s\n",randommakes("MMMMM-MMMMM-MMMMM-MMMMM-MMMMM"));
system("pause");
}
}
char *randommakes(char *optionsnumber)
{
srand((unsigned)time(NULL));//复位和初始化随机状态
int optionsnumbers=0;//记录参数的个数
int branchselect;//随机分支选择
char *randomsuc;//存储随机生成的字符
randomsuc=(char *)malloc(sizeof(char));
while(1)//随机生成字符的while循环
{
if(optionsnumbers>2700)
{
printf("Options Out!\n");
randomsuc=NULL;
break;
}
else if(optionsnumber[optionsnumbers]=='\0')//判断形参是否结束了
{
randomsuc[optionsnumbers]='\0';//在randomsuc变量末尾加入结束符'\0'
break;
}
else
{
switch(optionsnumber[optionsnumbers])//根据提取的形参选择分支
{
case 'T':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case 't':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case 'S':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
case 's':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
case 'N':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case 'n':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case 'G':
branchselect='1'+ rand()%3;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'g':
branchselect='1'+ rand()%3;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'M':
branchselect='1'+ rand()%2;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'm':
branchselect='1'+ rand()%2;//随机选择一个分支
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
}
break;
case 'X':
branchselect='1'+ rand()%4;
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case '4':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
}
break;
case 'x':
branchselect='1'+ rand()%4;
switch(branchselect)
{
case '1':
randomsuc[optionsnumbers]='A'+ rand()%26;
break;
case '2':
randomsuc[optionsnumbers]='a'+ rand()%26;
break;
case '3':
randomsuc[optionsnumbers]='0'+ rand()%10;
break;
case '4':
randomsuc[optionsnumbers]='!'+ rand()%15;
break;
}
break;
default:
randomsuc[optionsnumbers]=optionsnumber[optionsnumbers];
break;
}
optionsnumbers++;
continue;
}
}
return(randomsuc);
free(randomsuc);
}