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

2023-10-29

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

两种实现思路

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–

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 科技查新-委托书

    查新检索委托书要怎么填 什么时候需要填写查新检索委托书 委托查新机构做科技查新时 根据参考项目的专业特点 委托人需选择具备相应资质的查新机构 委托可以通过网上或现场提交委托书 并按照要求填写查新检索委托书 查新检索委托书需要填写哪些内容 在
  • 产品经理使用工具-----产品演示 Demo-builder

    Demo Builder 提供了一种简单的方法来创建显示软件和系统是如何工作的教程 演示或示范 Demo Builder 的易用性使您能够创建令人惊叹 但实际与专业教学视频的功能 Demo Builder 用于生成你需要教育 市场 或出售该
  • 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

    编译型和解释型 我们先看看编译型 其实它和汇编语言是一样的 也是有一个负责翻译的程序来对我们的源代码进行转换 生成相对应的可执行代码 这个过程说得专业一点 就称为编译 Compile 而负责编译的程序自然就称为编译器 Compiler 如果
  • Python day04 作业

    数学方面 五角星 一个五角星被定义为n 3n 1 2 def getPentagalNumber n c n 3 n 1 2 if n 10 0 print c end else print for i in range 1 101 get
  • Ubuntu在安装snappy时出现CMake Error at CMakeLists.txt:300 (set_property): set_property could not find TA

    在Ubuntu安装snappy过程中 出现了如下问题提示 这个要怎么解决 求各位大神解答 CMake Error at CMakeLists txt 294 add subdirectory The source directory hom
  • 华为OD机试 - 计算礼品发放的最小分组数目(Java)

    题目描述 又到了一年的末尾 项目组让小明负责新年晚会的小礼品发放工作 为使得参加晚会的同事所获得的小礼品价值相对平衡 需要把小礼品根据价格进行分组 但每组最多只能包括两件小礼品 并且每个分组的价格总和不能超过一个价格上限 为了保证发放小礼品
  • 小试牛刀1:使用Python-OpenCV 实现一副图片的高斯模糊处理

    实验步骤 1 环境 安装好python3 x opencv3 3 window下 2 高斯模糊 概念 高斯模糊本质上是低通滤波器 输出图像的每个像素点是原图像上对应像素点与周围像素点的加权和 使用cv2做高斯模糊 只要一行代码调用Gauss

随机推荐

  • 微信小程序页面栈_小程序页面栈详解

    在做小程序项目的时候不难发现 使用navigateTo进行页面跳转后 点击左上角或使用navigateBack返回 总是会按照之前的页面进入倒序来展示页面 那么问题来了 它们的跳转规则是什么样的呢 结合到实际业务中如何灵活运用呢 什么是页面
  • No SOURCES given to target: xxx

    文章目录 一 问题描述 二 解决办法 一 问题描述 CMake Error at CMakeLists txt add executable Cannot find source file src rs capture cpp Tried
  • 关于搭建简易广域网私人通信程序(python)一步到位!

    原料 python3 腾讯云服务器 用到的库 socket sys threading time pyinstaller 除pyinstaller外均不需单独安装 首先 默认已经买好云服务器 且安装好了python3 此处使用腾讯云服务器
  • csv文件的读与写

    csv文件的读取与写入 1 csv文件的读取 import pandas as pd csv path dataA1 csv df pd read csv csv path 可以通过csv文件的表头读取出某一列 表头见下图 print it
  • 理解inode

    inode是一个重要概念 是理解Unix Linux文件系统和硬盘储存的基础 我觉得 理解inode 不仅有助于提高系统操作水平 还有助于体会Unix设计哲学 即如何把底层的复杂性抽象成一个简单概念 从而大大简化用户接口 下面就是我的ino
  • 华为OD机试真题-基站维护最短距离 【2023.Q1】

    参考代码 小王是一名基站维护工程师 负责某区域的基站维护 某地方有n个基站 1
  • Android中的签名和签名文件的生成过程

    一 概述 二 还是从Key Store和keytool说起吧 三 数字签名和数字证书 四 apk的签名过程 五 签名中 MANIFEST MF CERT SF和 CERT RSA是怎么生成的 1 MANIFEST MF 2 CERT SF
  • QT日志系统创建,读取,修复

    一 内容简介 构建QT日志系统 遇到的问题以及结局办法 读取日志文件 用于检查程序运行情况 并且修复异常数据 二 软件环境 2 1 QT 5 14 1 新版QT6 4 6 5在线安装经常失败 而5 9版本又无法编译64位程序 所以就采用5
  • 巧用千寻位置GNSS软件

    千寻位置GNSS软件中的CAD功能 用于已有 CAD的图形的导入和编辑 并且可以对 CAD图形已有线条进行线放样 在日常测绘工作中十分常见 下面向各位介绍CAD功能的使用技巧 点击 测量 gt CAD 进入 CAD功能如图 5 3 1所示
  • 显卡无法为此计算机,如何解决win10系统电脑中无法安装intel显卡驱动的问题

    如何解决win10系统电脑中无法安装intel显卡驱动的问题 腾讯视频 爱奇艺 优酷 外卖 充值4折起 在使用win10系统电脑的时候 如果我们想要安装intel显卡驱动 却提示无法安装的话 应如何处理呢 接下来就由小编来告诉大家 一 手动
  • CentOS7(Linux)安装总结

    主要参考以下文章 CentOS7 Linux 详细安装教程 图文详解 缄默 給 傷的博客 CSDN博客 linuxcentos7安装步骤https blog csdn net weixin 43849575 article details
  • Mutex内核同步机制详解

    一 Mutex锁简介 在linux内核中 互斥量 mutex 即mutual exclusion 是一种保证串行化的睡眠锁机制 和spinlock的语义类似 都是允许一个执行线索进入临界区 不同的是当无法获得锁的时候 spinlock原地自
  • 使用VNC远程桌面Ubuntu【内网穿透实现公网远程】

    文章目录 前言 1 ubuntu安装VNC 2 设置vnc开机启动 3 windows 安装VNC viewer连接工具 4 内网穿透 4 1 安装cpolar 支持使用一键脚本命令安装 4 2 创建隧道映射 4 3 测试公网远程访问 5
  • 【深度学习】 Python 和 NumPy 系列教程(十五):Matplotlib详解:2、3d绘图类型(1):线框图(Wireframe Plot)

    目录 一 前言 二 实验环境 三 Matplotlib详解 1 2d绘图类型 2 3d绘图类型 0 设置中文字体 1 线框图 Wireframe Plot 一 前言 Python是一种高级编程语言 由Guido van Rossum于199
  • Qt事件过滤器

    有时候 对象需要查看 甚至要拦截发送到另外对象的事件 例如 对话框可能想要拦截按键事件 不让别的组件接收到 或者要修改回车键的默认处理 通过前面的章节 我们已经知道 Qt 创建了 QEvent 事件对象之后 会调用 QObject 的 ev
  • dll 导出函数名的那些事

    经常使用VC6的Dependency查看DLL导出函数的名字 会发现有DLL导出函数的名字有时大不相同 导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系 VC 支持两种语言 即C C 这也是造成DLL导出函数差异的根源
  • 2019年,iOS开发的你准备何时跳槽?

    序言 我相信很多人都在说 iOS行业不好了 iOS现在行情越来越难了 失业的人比找工作的人还要多 失业即相当于转行 跳槽即相当于降低自己的身价 那么做iOS开发的你 你是否在时刻准备着跳槽或者转行了 我们先看一下现在iOS行业 iOS程序员
  • 人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

    一 人脸修复算法 1 算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型 由南洋理工大学和商汤科技联合研究中心联合开发 它能够接收模糊或马赛克图像作为输入 并生成更清晰的原始图像 算法源码地址 https github
  • Qt5 项目文件.pro参数详解

    qmake的概念 qmake是用来为不同的平台的开发项目创建makefile的一个工具 qmake简化了makefile的生成 因此创建一个makefile只需要几行信息的文件 qmake可以供任何一个软件项目使用 而不用管他是不是使用Qt
  • C/C++Java生成指定长度随机字符串的三种方法

    学习 实验记录 也是方便自己以后查找 目录 两种实现思路 第一种实现思路 随机数转char 第二种思路 随机数取字符 C语言 使用char数组 C语言 使用char C 使用string类 Java通过字符数组或字符串方式 两种实现思路 C