【C++PythonJava】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言
文章目录
- Beginning
- 1)ASCLL 码
- 2)大小比较
- 2)判断数字字符
- 3)字符、数字间的相互转换
- End
Beginning
在 C++ 中,字符和整数有着密不可分的关系。原因就是在计算机中,字符是以一种较 ASCLL 码的整数存储的。自然,在算法竞赛或一些应用场景中,字符和整数之间的相互转换也成为一种华丽且简便的技巧。
但一旦使用不好这些技巧,就可能导致程序出现漏洞,出现运行问题。所以,本文将介绍一些基本的字符和整数之间的转换用法。望大家多多指教。
1)ASCLL 码
百度百科 上的解释:ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
以下是可显示字符的 ASCLL 码表:
以下是 ASCLL 控制字符表:
在 C++ 语言中,可以通过强制类型转换来获取字符的 ASCLL 码:
cout << int('A'); // 输出65
cout << int(' '); // 输出32
注意:在使用 cout 时,一定要加强制类型转换,即 int(…)。不然会以整数输出;scanf 和 printf 因为有固定的类型占位符,反而没有这和问题。
在 Python 中,可以用 ord()
函数获取字符的 ASCLL 码值:
print(ord('a')) # 输出97
print(ord('+')) # 输出43
在 Java中,可以用整数 Integer 类的 valueOf()
函数进行获取:
System.out.println(Integer.valueOf('q')); // 输出113
System.out.println(Integer.valueOf('5')); // 输出53
2)大小比较
在 C++ 中,字符(char)与整数(int)比较时,会把字符自动转为整型去比较(因为字符占 1 字节,整型占 4 字节,C++默认向更宽的数据类型转换)。
所以,字符和字符、字符和整数之间都可以按照 ASCLL 码比较大小:
cout << bool('a' < 100); // 输出1(即true)
cout << bool('0' != 48); // 输出0(即false)
Pyhton 则对类型要求较为严格,如果直接用字符和数字比较,会报 TypeError: '<' not supported between instances of 'str' and 'int'
。可以用 chr()
函数把整数转成字符比较,或用 ord()
函数把字符转换成整数比较:
print('a' > 'b') # 输出False
print(chr(97) < 'b') # 输出True
print(ord('a') == 98) # 输出False,'a'的ASCLL是97
在 Java 中,我们可以和 C++ 一样,直接用比较运算符来比较大小:
System.out.println('a' == 'b'); // 输出false
还可以用 Character 类的 compare() 方法对两个字符进行比较,该函数返回两个字符的差值。对于 Character.compare(c1, c2) > 0
,说明 c1>c2
;对于 Character.compare(c1, c2) < 0
,说明 c1<c2
;对于 Character.compare(c1, c2) == 0
,说明 c1==c2
:
System.out.println(Character.compare('p', 'r')); // 输出-2,即'q'比'r'的ASCLL小2
2)判断数字字符
在 ASCLL 码表中,我们会发现,数字的 ASCLL 码都在 48~57 之间,所以可以利用这个特点来判断是否是数字字符:
C++ & Java:if(ch>=48 && ch<=57)
Python:if ch>=48 and ch<=57
我们还可以利用类型转换,判断字符的大小是否在 ‘0’ 和 '9’之间,同样可以达到效果:
C++ & Java:if(ch>='0' && ch<='9')
Python:if ch>='0' and ch<='9'
同时,许多语言都自带判断字符是否是数字的函数实现:
C++:
#include <cctype> // 或 #inlucde <ctype.h>
int isdigit(char c); // 是数字返回1,不是返回0
int isalpha(char c); // 不是字母返回0,,是大写字母返回1,是小写字母返回2
上面两个函数在不同编译器下有差别,以上是 MinGW-w64 GCC 11.4.0 64-bit 编译器的结果。
Python:
print('2'.isdigit()) #True,这是在字符串对象里的方法
print('u'.isalpha()) #True
Java:
Character.isDigit(char c); // 判断字符c是否是数字字符,是返回True,不是返回False
Character.isLowerCase(char c); // 判断c是不是小写字母,是返回True,不是返回False
Character.isUpperCase(char c); // 判断c是否是大写字母,是返回True,不是返回False
Character.isLetterOrDigit(char c); // 判断c是否是字母或数字字符,是返回True,不是返回False
3)字符、数字间的相互转换
先看一些 ASCLL 码及其对应字符之间的性质:
- 常见ASCII码的大小规则:数字< 大写字母 < 小写字母;
- 数字比字母要小。如 “7”<“F”;
- 数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;
- 字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;
- 同个字母的大写字母比小写字母要小32。如“A”<“a” ;
- 几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48。
有了这些性质,就能得到一些规律(这里简单列举几个,读者可以自己发掘更多):
- 数字转字符:
char ch = num + '0';
- 字符转数字:
int num = ch - '0';
- 大写字母转小写字母:
char lowerch = upperch + 32;
- 小写字母转大写字母:
char upperch = lowerch + 32;
End
感谢大家的观看!字符转换永远是基础中的基础,希望大家都能熟练掌握这些技巧,让它们成为我们成功路上的垫脚石!
这里是 YLCHUP,拜拜ヾ(•ω•`)o
相关文章:

【C++PythonJava】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言
文章目录 Beginning1)ASCLL 码2)大小比较2)判断数字字符3)字符、数字间的相互转换End Beginning 在 C 中,字符和整数有着密不可分的关系。原因就是在计算机中,字符是以一种较 ASCLL 码的整数存储的。自然&…...

人像视频淡入淡出效果的灵敏检验方法
在视频中经常会有淡入淡出的效果,这可能导致人脸检测在实际人已经离开画面之后仍然触发,特别是在使用基于像素强度变化的检测算法时。为了更精确地裁剪视频,你可以尝试以下几种方法: 使用更复杂的人脸检测模型: 有些…...

Unity UGUI Image Maskable
在Unity的UGUI系统中,Maskable属性用于控制UI元素是否受到父级遮罩组件的影响。以下是关于这个属性的详细说明和如何使用: Maskable属性 Maskable属性: 当你在GameObject上添加一个Image组件(比如UI面板或按钮)时&…...

SpringCloud | 单体商城项目拆分(微服务)
为什么要进行微服务拆分? 在平常的商城项目中,我们一般的项目结构模块都是将各种业务放在同一个项目文件夹,比如像: 用户,购物车,商品,订单,支付等业务都是放在一起,这样…...

uniapp 如何实现路由拦截,路由守卫
uniapp框架的全局文件:page.json全局文件,官网链接 背景: 通过封装 UniApp 的路由方法,并在封装方法中添加自定义逻辑,可以实现类似 Vue Router 的路由守卫功能。 在 UniApp 框架中,不像 Vue Router 直接支…...

人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解。 文章目录 一、引言二、梯度问题1. 梯度爆炸梯度爆炸的概念梯度爆炸的原因梯度爆炸的解决方案 2. 梯度消失梯度消失的概念梯度…...

Qt/QML学习-ComboBox
QML学习 ComboBox例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("ComboBox")ComboBox {id: comboBox// 列表项数据模型model: ListModel {List…...

微服务实战系列之玩转Docker(一)
前言 话说计算机的“小型化”发展,历经了大型机、中型机直至微型机,贯穿了整个20世纪的下半叶。同样,伴随着计算机的各个发展阶段,如何做到“资源共享、资源节约”,也一直是一代又一代计算机人的不懈追求和历史使命。今…...

Java中常见的语法糖
文章目录 概览泛型增强for循环自动装箱与拆箱字符串拼接枚举类型可变参数内部类try-with-resourcesLambda表达式 概览 语法糖是指编程语言中的一种语法结构,它们并不提供新的功能,而是为了让代码更易读、更易写而设计的。语法糖使得某些常见的编程模式或…...

数据库使用SSL加密连接
简介 数据库开通SSL加密连接是确保数据传输过程中安全性的关键措施,它通过加密数据、验证服务器身份、保护敏感信息、维护数据完整性和可靠性,同时满足行业标准和法规要求,进而提升用户体验和信任度,为企业的数据安全和业务连续性…...

华为OD算法题汇总
60、计算网络信号 题目 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。注意:网络信号可以绕过阻隔物 array[m][n],二维数组代表网格地图 array[i][j]0,代表i行j列是空旷位置 a…...

服务器的rabbitmq的guest账号登不进去
要配置 RabbitMQ 允许 guest 账号从非 localhost 地址登录,需要执行以下步骤: 编辑 RabbitMQ 配置文件: 打开 RabbitMQ 的配置文件,通常位于 /etc/rabbitmq/rabbitmq.conf 或者 /etc/rabbitmq/rabbitmq-env.conf。如果这些文件不存…...

决策树(ID3,C4.5,C5.0,CART算法)以及条件推理决策树R语言实现
### 10.2.1 ID3算法基本原理 ### mtcars2 <- within(mtcars[,c(cyl,vs,am,gear)], {am <- factor(am, labels c("automatic", "manual"))vs <- factor(vs, labels c("V", "S"))cyl <- ordered(cyl)gear <- ordered…...

文心一言《使用手册》,文心一言怎么用?
一、认识文心一言 (一)什么是文心一言 文心一言是百度研发的 人工智能大语言模型产品,能够通过上一句话,预测生成下一段话。 任何人都可以通过输入【指令】和文心一言进行对话互动、提出问题或要求,让文心一言高效地…...

Spring Boot集成qwen:0.5b实现对话功能
1.什么是qwen:0.5b? 模型介绍: Qwen1.5是阿里云推出的一系列大型语言模型。 Qwen是阿里云推出的一系列基于Transformer的大型语言模型,在大量数据(包括网页文本、书籍、代码等)进行了预训练。 硬件要求:…...

GreenDao实现原理
GreenDao 是一款针对 Android 平台优化的轻量级对象关系映射 (ORM) 框架,它将 Java 对象映射到 SQLite 数据库,以简化数据持久化操作。GreenDao 的主要优点包括高性能、低内存占用、易于使用以及对数据库加密的支持。 以下是基于源码的 GreenDao 实现原…...

Perl语言之数组
Perl数组可以存储多个标量,并且标量数据类型可以不同。 数组变量以开头。访问与定义格式如下: #! /usr/bin/perl arr("asdfasd",2,23.56,a); print "输出所有:arr\n"; print "arr[0]$arr[0]\n"; #输出指定下标 print…...

写材料word和PPT
一、WORD 1、写内容 2、参考GPT改:内容、逻辑结构、语句 3、查标题及其标号 4、修改格式:仿宋 、正文统一为小三,标题三号,1.5倍行距,加页码。 采用VBA代码自动修改,不知为何标题无法修改字体 Sub 插入页…...

Centos---命令详解 vi 系统服务 网络
目录 一、CentOS vi命令详解 二、CentOS系统服务命令 三、CentOS权限管理命令: 四、CentOS网络管理命令介绍: 一、CentOS vi命令详解 Vi是一款强大的文本编辑器,在CentOS中广泛使用。以下是Vi编辑器的一些常用命令: 1. 打开…...

【.NET全栈】ASP.NET开发web应用——ASP.NET中的样式、主题和母版页
文章目录 前言一、在ASP.NET中应用CSS样式1、创建CSS样式(1)内联样式(2)内部样式表(3)外部样式表 2、应用CSS样式(1)菜鸟教程-简单例子(2)菜鸟教程-用户界面&…...

[ruby on rails]部署时候产生ActiveRecord::PreparedStatementCacheExpired错误的原因及解决方法
一、问题: 有时在 Postgres 上部署 Rails 应用程序时,可能会看到 ActiveRecord::PreparedStatementCacheExpired 错误。仅当在部署中运行迁移时才会发生这种情况。发生这种情况是因为 Rails 利用 Postgres 的缓存准备语句(PreparedStatementCache)功能来…...

函数传值面试题
let a {name: aa };function fun1(a) {a []; // 这里创建了一个新的局部变量a,它是一个空数组// a.name "芜湖" }fun1(a); // 调用fun1,传入a的引用副本 console.log(a); // 输出:{ name: aa }在 JavaScript 中,当你…...

redis笔记2
redis是用c语言写的,放不频繁更新的数据(用户数据。课程数据) Redis 中,"穿透"通常指的是缓存穿透(Cache Penetration)问题,这是指一种恶意或非法请求直接绕过缓存层,直接访问数据库或…...

Kafka(四) Consumer消费者
一,基础知识 1,消费者与消费组 每个消费者都有对应的消费组,不同消费组之间互不影响。 Partition的消息只能被一个消费组中的一个消费者所消费, 但Partition也可能被再平衡分配给新的消费者。 一个Topic的不同Partition会根据分配…...

前端路由手写Hash和History两种模式
文章目录 1. Hash模式:简洁而广泛适用2. History模式:更自然的用户体验3. 结论 在现代Web开发中,单页面应用(Single Page Application,简称SPA)因其流畅的用户体验和高效的页面交互能力而备受青睐。前端路由…...

Redis的单线程讲解与指令学习
目录 一.Redis的命令 二.数据类型 三.Redis的key的过期策略如何实现? 四.Redis为什么是单线程的 五.String有关的命令 Redis的学习专栏:http://t.csdnimg.cn/a8cvV 一.Redis的命令 两个基本命令 在Redis当中,有两个基本命令࿱…...

为什么MySQL会选择B+树作为索引
为什么MySQL会选择B树作为索引 在数据库管理系统中,索引是提升查询效率的关键技术之一。MySQL作为广泛使用的关系型数据库管理系统,其核心存储引擎InnoDB选择B树作为其索引结构,这一选择背后蕴含了深刻的性能和存储效率考量。本文将简要介绍…...

k8s secret-从环境变量里去读和从yaml文件里读取secret有什么区别?
从环境变量和YAML文件中读取Kubernetes Secret的区别主要体现在使用方式、动态更新能力以及管理便捷性上。以下是详细的区别说明: 1. **使用方式**: - **环境变量方式**:Kubernetes允许将Secret作为环境变量注入到Pod的容器中。这种方式的好处…...

Springboot+Aop用注解实现阿里云短信验证码校验,校验通过自动删除验证码缓存
1.新建操作类型枚举(这里的IEnum是我自定义的http请求拦截接口,不需要的话可以不用实现) Getter AllArgsConstructor public enum OperationType implements IEnum<Integer> {/*** 注册*/SIGN_UP(0),/*** 密码登录*/LOGIN_BY_PWD(1),/…...

无线物联网新时代,RFID拣货标签跟随潮流
拣选技术的演变历程,本质上是从人力操作向自动化、智能化转型的持续进程。近期,“货寻人”技术成为众多企业热烈追捧的对象,它可以根据企业的特定需求,从众多拣选方案中选出最优解。那么,在采用“货到人”拣选技术时&a…...