当前位置: 首页 > news >正文

【C++PythonJava】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言

文章目录

    • Beginning
    • 1)ASCLL 码
    • 2)大小比较
    • 2)判断数字字符
    • 3)字符、数字间的相互转换
    • End

Beginning

在 C++ 中,字符和整数有着密不可分的关系。原因就是在计算机中,字符是以一种较 ASCLL 码的整数存储的。自然,在算法竞赛或一些应用场景中,字符和整数之间的相互转换也成为一种华丽且简便的技巧。

但一旦使用不好这些技巧,就可能导致程序出现漏洞,出现运行问题。所以,本文将介绍一些基本的字符和整数之间的转换用法。望大家多多指教。

1)ASCLL 码

百度百科 上的解释:ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

以下是可显示字符的 ASCLL 码表:
可显示ASCLL表_32~126
以下是 ASCLL 控制字符表:
ASCLL控制字符表_0~31+127
在 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 码及其对应字符之间的性质:

  1. 常见ASCII码的大小规则:数字< 大写字母 < 小写字母;
  2. 数字比字母要小。如 “7”<“F”;
  3. 数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;
  4. 字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;
  5. 同个字母的大写字母比小写字母要小32。如“A”<“a” ;
  6. 几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48。

有了这些性质,就能得到一些规律(这里简单列举几个,读者可以自己发掘更多):

  1. 数字转字符:char ch = num + '0';
  2. 字符转数字:int num = ch - '0';
  3. 大写字母转小写字母:char lowerch = upperch + 32;
  4. 小写字母转大写字母:char upperch = lowerch + 32;

End

感谢大家的观看!字符转换永远是基础中的基础,希望大家都能熟练掌握这些技巧,让它们成为我们成功路上的垫脚石!

这里是 YLCHUP,拜拜ヾ(•ω•`)o

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能家居和智能家电有什么区别?
  • 深入探讨:Node.js、Vue、SSH服务与SSH免密登录
  • vscode常用组件
  • k8s集群创建devops项目一直等待状态,没有发现host
  • 算法——双指针(day3)
  • 记一下blender的烘焙贴图的UV特殊用法
  • HouseCrafter:平面草稿至3D室内场景的革新之旅
  • 数学基础【俗说矩阵】:矩阵相乘
  • redhat 7服务管理
  • 科普文:TaobaoVM信息收集
  • 算法 —— 快速幂
  • mac docker no space left on device
  • 计算机网络——网络层(路由选择协议、路由器工作原理、IP多播、虚拟专用网和网络地址转换)
  • 数据库连接的艺术:在PyCharm中轻松配置
  • 【Python】Selenium怎么切换浏览器的页面
  • 时间复杂度分析经典问题——最大子序列和
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 345-反转字符串中的元音字母
  • const let
  • download使用浅析
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • React-flux杂记
  • STAR法则
  • TCP拥塞控制
  • 百度地图API标注+时间轴组件
  • 从零开始的无人驾驶 1
  • 前端攻城师
  • 译自由幺半群
  • 赢得Docker挑战最佳实践
  • - 转 Ext2.0 form使用实例
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 函数计算新功能-----支持C#函数
  • # 数论-逆元
  • #100天计划# 2013年9月29日
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)MFC+openGL单文档框架glFrame
  • (2022 CVPR) Unbiased Teacher v2
  • (5)STL算法之复制
  • (javaweb)Http协议
  • (分布式缓存)Redis持久化
  • (函数)颠倒字符串顺序(C语言)
  • (六)DockerCompose安装与配置
  • (转)Google的Objective-C编码规范
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)人的集合论——移山之道
  • ./configure、make、make install 命令
  • .net core + vue 搭建前后端分离的框架
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .netcore如何运行环境安装到Linux服务器
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)