【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中科微电子ATGM336H GPS定位模块STM32应用

文章目录 前言1. 中科微电子ATGM336H的使用1.1 ATGM336H引脚说明1.2 数据帧介绍1.3 经纬度介绍1.4 ATGM336H的启动方式 2 数据处理前置C语言知识2.1 strstr函数2.2 memset函数2.3 memcpy函数2.4strtod函数 3. 开始移植3.1 usart初始化程序3.2 串口中断接收函数3.4 数据帧的解析…

—张pdf怎么分割成多页,怎么把一个pdf分割

在数字化时代&#xff0c;pdf文件已经成为我们工作和生活中不可或缺的一部分。然而&#xff0c;有时候我们可能会遇到需要将一张pdf文件分割成多页的情况。无论是为了便于分享&#xff0c;还是为了满足特定的文档格式要求&#xff0c;这个任务都可能变得相当棘手。但别担心&…

17098 广告牌最佳安放问题

这个问题可以通过动态规划来解决。我们可以定义一个数组d&#xff0c;其中d[i]表示到第i个广告牌地点时可以选择放置广告牌的最大效益值。然后我们可以通过遍历所有可能的j&#xff08;1 < j < i && x[i] - x[j] > 5&#xff09;&#xff0c;然后更新d[i]为ma…

【云原生】ptcpdump捕获任何进程、容器或 Pod 的网络流量的抓包神器——筑梦之路

ptcpdump 是一个使用 eBPF 技术开发的、类 tcpdump 的网络抓包工具。它除了兼容 tcpdump 的常用命令行参数以及包过滤语法外&#xff0c; 还额外提供了如下核心特性&#xff1a; 在输出中记录和显示发送网络流量的进程、容器、Pod 信息。 支持对指定进程、容器以及 Pod 进行抓…

LED显示屏中什么情况下用网线?什么情况下用光纤?

在这个色彩斑斓的数字时代&#xff0c;LED显示屏如同城市的眼睛&#xff0c;闪烁着各种信息与艺术的光芒。而要让这些“眼睛”明亮有神&#xff0c;背后离不开两条重要的“信息高速公路”——网线和光纤。它们就像是LED显示屏的血管&#xff0c;负责输送数据这一“血液”。那么…

实验三:图像的平滑滤波

目录 一、实验目的 二、实验原理 1. 空域平滑滤波 2. 椒盐噪声的处理 三、实验内容 四、源程序和结果 (1) 主程序&#xff08;matlab&#xff09; (2) 函数GrayscaleFilter (3) 函数MeanKernel (4) 函数MedFilter 五、结果分析 1. 空域平滑滤波 2. 椒盐噪声的处理…

Python PDF文件的加密和水印处理使用详解

概要 在日常工作中,处理PDF文件是非常常见的需求。为了保护PDF文件的内容,我们可能需要对其进行加密。同时,为了防止文件被未经授权的复制和使用,添加水印也是一种有效的方法。本文将详细介绍如何使用Python对PDF文件进行加密和添加水印的操作,包含详细的示例代码,帮助全…

嵌入式系统中的GPIO控制与应用

GPIO是嵌入式系统中最常见且功能最强大的接口之一。它允许硬件工程师通过编程来配置和控制芯片上的数字引脚&#xff0c;实现输入和输出的功能。在本文中&#xff0c;我们将从理论和实践两个方面探讨GPIO的工作原理&#xff0c;并通过一个简单的示例项目来演示如何利用GPIO控制…

IP风险画像 金融行业的安全盾牌

在当今数字化时代&#xff0c;金融行业面临着前所未有的安全挑战。随着在线交易和数字银行业务的迅猛发展&#xff0c;欺诈和网络攻击的威胁也在不断增加。金融机构需要高效、可靠的安全解决方案来保护客户的资产和个人信息&#xff0c;防止各种形式的欺诈行为。 IP风险画像是…

CS110L(Rust)

1.Rust 语法总结 数值类型 有符号整数: i8, i16, i32, i64无符号整数: u8, u16, u32, u64 变量声明 声明变量: let i 0; // 类型推断let n: i32 1; // 显式类型声明 可变变量: let mut n 0; n n 1; 字符串 注意&#xff0c;let s: str "Hello world";…

WebSocket、服务器推送技术

WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议&#xff0c;它可以让客户端和服务器之间进行实时的双向通信&#xff0c;且不存在同源策略限制 WebSocket 使用一个长连接&#xff0c;在客户端和服务器之间保持持久的连接&#xff0c;从而可以实时地发送和接收数据…

区块链与云计算的融合:新时代数据安全的挑战与机遇

随着信息技术的迅猛发展&#xff0c;云计算和区块链技术作为两大前沿技术在各自领域内展示出了巨大的潜力。而它们的结合&#xff0c;即区块链与云计算的融合&#xff0c;正在成为数据安全领域的新趋势。本文将探讨这一融合对数据安全带来的挑战和机遇&#xff0c;以及其在企业…

django实现用户的注册、登录、注销功能

创建django项目的步骤&#xff1a;Django项目的创建步骤-CSDN博客 一、前置工作 配置数据库&#xff0c;设置数据库引擎为mysql 1、在settings文件中找到DATABASES, 配置以下内容 DATABASES {"default": {ENGINE: django.db.backends.mysql, # 数据库引擎NAME: dja…

【数据结构与算法】希尔排序:基于插入排序的高效排序算法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 二、基本原理 三、实现步骤 四、C语言实现 五、性能分析 1. 时间复杂度…

Hadoop3:HDFS-查看logs文件,排查NameNode故障原因。

问题一、NameNode进程退出 我们发现&#xff0c;NameNode进程不存在。 情况1、单独启动NameNode hdfs --daemon start namenode能够正常拉起&#xff0c;那就没问题 情况2、无法独立启动NameNode 先尝试启动NameNode hdfs --daemon start namenode发现&#xff0c;没能成…

el-date-picker手动输入日期,通过设置开始时间和阶段自动填写结束时间

需求&#xff1a;根据开始时间&#xff0c;通过填写阶段时长&#xff0c;自动填写结束时间&#xff0c;同时开始时间和节数时间可以手动输入 代码如下&#xff1a; <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…

Redis深度解析:从基础到高级特性,剖析关键技术

一、关于Redis Redis介绍 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSIC 语言编写、遵守 BSD&#xff08;开源协议&#xff09; 协议、支持网络、可基于内存…

指令判断数据更改,文本变色

默认数据是这样&#xff0c;如果更改了其中一个&#xff0c;文本框变成红色 <el-form-item label"Activity name"><el-inputv-model"form.name"v-highlight"datas[name]"input"changeValue(name)"/></el-form-item>…

excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 apache poi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款优秀的 excel 工具库&#xff1a;easypoi。 二、easypoi 以前的以前&#xff0c;有个大佬程序员&#xff0c;跳到一家公司之后就和业务人员聊上了&…

智慧水利:迈向水资源管理的新时代,结合物联网、云计算等先进技术,阐述智慧水利解决方案在提升水灾害防控能力、优化水资源配置中的关键作用

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…