C/C++Java生成指定长度随机字符串的三种方法

学习、实验记录,也是方便自己以后查找

两种实现思路

C、C++使用同一种思路,只是使用的数据结构不一样

C、C++中直接产生随机的字符串的库函数目前是没有的,我们可以自己写一个,

第一种实现思路-随机数转char

  1. 产生固定长度的随机的字符串
    主要就是产生固定个数的随机字符,
    那么就简单了,用两组随机数:
    一组:随机产生0~25的整数num,然后用’a’+num来赋值小写字母,‘A’+num来赋值大写字母
    一组:随机产生0,1,产生0,就生成小写字母;产生1,就生成大写字母;

  2. 产生不固定长度的随机的字符串
    就是在上面的产生固定长度的随机的字符串的基础上,在引入一组随机数,来控制字符串长度

C语言中没有关于字符串的定义,在C中要定义字符串必须使用数组或者指针,如 char a[10];或者 char *a = “sfg”。所以,分别以char数组和char*各自做一遍。

第二种思路-随机数取字符

生成指定长度的字符串,还有一种简单暴力的方法。构造一个包含需要的字符的字符数组或者是字符串。通过生成其个数之内的随机数,决定将哪一个字符附加到字符串末尾。

这种方式,只需要一个随机数就可以了。如果要生成随机长度的字符串,再加一个随机数就可以了。

C语言,使用char数组

实现代码:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//C使用char数组方式生成指定长度随机字符串 
void generCharArray(int len)
{
	int flag,i;
	char ch[len+1]={NULL};//注意要多分配一个字节来保存字符串最后的结束符
	srand((unsigned)time(NULL));

	for(i=0;i<len;i++)
	{
		flag=rand()%2;
		if(flag) ch[i]='A'+rand()%26;
		else ch[i]='a'+rand()%26;
	}
	ch[i]='\0';
	
	printf("生成的%d个字符长度随机数字符串\n",len); 
	printf("%s\n",ch);
	//return ch;
 } 

int main()
{
	generCharArray(10);
	getch();
	return 0;
}

运行截图:
在这里插入图片描述

C语言,使用char*

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//C使用char*方式生成指定长度随机字符串 
void generString(int len)
{
	char* string = new char[len+1];//注意要多分配一个字节来保存字符串最后的结束符
	int flag,j;
	
	srand((unsigned)time(NULL));

	for(j=0;j<len;j++)
	{
		flag=rand()%2;
		if(flag) string[j]='A'+rand()%26;
		else string[j]='a'+rand()%26;
	}
	string[j]='\0';
	printf("生成的%d个字符长度随机数字符串\n",len); 
	printf(string);

	//return string;
 } 

int main()
{
	generString(10);
	getch();
	return 0;
}

要注意new后面的符号

  • (): 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量
  • []: 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量

创建char* 变量,如果用char *p=new char("absd"); 是分配一个char(1字节)的空间,用"absd"来初始化。
应该使用char *p=new char[6];方式。
注意这里new时要多分配一个字节来保存字符串最后的结束符(\0)。

运行截图:
在这里插入图片描述

C++ 使用string类

在C++中有一种更简单的方法,那就是string类, 可直接定义字符串, 例如string s(“sdgfhl”); 而且有一个好处是字符串的长度是可变的。

#include<cstdio>
#include<time.h>
#include<stdlib.h>
#include <string>

#include<iostream>>
using namespace std;

//C++方式生成指定长度随机字符串 
string gengerString(int n){
	srand((unsigned)time(NULL));                        //产生随机化种子
	printf("生成%d个字符的字符串\n",n);                                      
	std::string str = "";
	for(int i=1;i <= n;i++)
	{
		int flag;                        
		flag = rand()%2;                     //随机使flag为1或0,为1就是大写,为0就是小写 
		if(flag == 1)                        //如果flag=1 
			str += rand()%('Z'-'A'+1)+'A';       //追加大写字母的ascii码 
		else 
			str += rand()%('z'-'a'+1)+'a';       //如果flag=0,追加为小写字母的ascii码 
		
	}
	cout<<str<<endl;                //将字符串输出 
	return str;
} 

int main()
{
	gengerString(10);
	return 0;
} 

运行截图:
在这里插入图片描述

Java通过字符数组或字符串方式

生成指定长度的字符串,还有一种简单暴力的方法。构造一个包含需要的字符的字符数组或者是字符串。通过生成其个数之内的随机数,决定将哪一个字符附加到字符串末尾。

这种方式,只需要一个随机数就可以了。如果要生成随机长度的字符串,再加一个随机数就可以了。

如果需要生成只有包含大小写英文字符的字符串,就是52位,如果要加上数字0-9的话就是62位。如果需要生成包含其他指定字符的字符串,只需要改一下str字符串,把需要的字符写入就好了。
需要生成包含那些字符的字符串,直接修改str就好了。

实现代码:

//生成指定长度字符串
    public static String generString(int len){
        /**生成指定长度的随机字符串
         */
        //定义一个字符串(A-Z,a-z)即52位;
        String str="zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZXCVBNM";
        int strLen = str.length();
        //由Random生成随机数
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<  len; i++){
            //产生0-strLen的数字
            int number = random.nextInt(strLen);
            //将产生的数字通过len次附加到sb中
            sb.append(str.charAt(number));
        }
        //将StringBuffer类字符串转换成字符串
        return sb.toString();
    }

运行截图:

在这里插入图片描述

—END–

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值