【C语言】字母转换大小写的三种方法

🦄个人主页:修修修也

🎏所属专栏:C语言

⚙️操作环境:Visual Studio 2022


 目录

方法一:库函数法

1.小写转换大写:toupper()函数

2.大写转换小写:tolower()函数

方法二:自定义函数加减32法

1.小写转换大写:字符数据减32

2.大写转换小写:字符数据加32

方法三:自定义函数位运算法

大小写转换:字符数据按位异或32


方法一:库函数法

1.小写转换大写:toupper()函数

我们先来看toupper()函数简介

 注意,toupper()函数的原型定义在头文件<ctype.h>中,因此使用前需要包含该头文件

下面我们来看toupper()函数的原型

int toupper ( int c );

综上可知,当你向toupper()函数传输一个小写字母(实际是它的ASCII值)时,它会返回给你一个该字母对应的大写字母(实际是大写字母的ASCII值)。

我们试着在编译器中测试一下该函数:

 可以看到,toupper()函数可以直接接收整形数据即字符的ASCII码值作为参数,然后返回相应大写字母的ASCII码值

但要注意的是,作为toupper()函数的参数的整形只能识别一个字节的整形,即十进制0-255范围内,如果给定的整形大小超过一个字节,则会发生整形截断,即会自动截断后八位之外的数据

还有需要注意的是,在发生截断的情况下,toupper函数返回的是截断后的原数据,而不会返回转换成大写后的数据.

如:

 


2.大写转换小写:tolower()函数

我们来看一下tolower()函数的简介

 可以发现,tolower()函数的函数和前面的toupper()函数非常相似,区别只是tolower()函数大写转换成小写,而toupper()函数则负责将小写转换成大写

使用方法完全和toupper()一样,如:

同样也会发生整形截断

可以看到,在前面的演示中tolower()函数也发生了整形截断

当我们会使用toupper()函数和tolower()函数后,下面我们来看一下如何不借助库函数来实现字母的大小写转换。即构造自己的字母大小写转换函数


方法二:加减32法

1.小写转换大写:字符数据减32

ASCII码表:

由ASCII码表我们可以得知,要根据小写字母得到大写字母,只需将小写字母的值减去32即可,因此我们自己写一个函数负责将传入的符合小写字母区间的字母转换成大写字母,其余不符合的返回原值,代码实现逻辑教简单.

如下:

#include<stdio.h>
int my_toupper(int ch)
{if (ch >= 97 && ch <= 122)return ch - 32;elsereturn ch;
}int main()
{char ch = 'a';ch=my_toupper(ch);printf("%c", ch);return 0;
}

代码运行效果:

 

可见,该函数具有成功将小写字母转换成大写的功能。


2.大写转换小写:字符数据加32

同理可知,要根据大写字母得到小写字母,只需将大写字母的值加上32即可,因此我们自己写一个函数负责将传入的符合大写字母区间的字母转换成小写字母,其余不符合的返回原值,该部分代码实现逻辑与前文类似.

如下:

#include<stdio.h>
int my_tolower(int ch)
{if (ch >= 65 && ch <= 90)return ch + 32;elsereturn ch;
}int main()
{char ch = 'A';ch = my_tolower(ch);printf("%c", ch);return 0;
}

 代码运行效果:

该函数同样能接收符合条件的字符ASCII码值完成转换

不符合条件时,返回原值


方法三:位运算法

大小写转换:字符数据按位异或32

在位运算的层面上,我们可以借助按位异或^ , 相同为0,不同为1)来帮我们实现字母大小写的转换.

如:

 反之用97^32=65.

因此该方法可以实现传入大写字符转换成小写字符传入小写字符转换成大写字符的效果.

代码如下:

int my_move(int ch)
{if (((ch >= 97) && (ch <= 122)) || ((ch >= 65) && (ch <= 90)))return ch ^ 32;elsereturn ch;
}int main()
{char ch1 = 'a';ch1=my_move(ch1);char ch2 = 'A';ch2=my_move(ch2);char ch3 = 97;ch3=my_move(ch3);char ch4= 65;ch4=my_move(ch4);char ch5 = 322;ch5=my_move(ch5);printf("%c\n", ch1);printf("%c\n", ch2);printf("%c\n", ch3);printf("%c\n", ch4);printf("%c\n", ch5);return 0;
}

代码运行效果如下:

 可以看到,该函数同样可以达到之前大小写转换的效果。


总结

以上就是字母大小写转换的三种方法的相关内容,希望这篇博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦是行人!我们一起学习,一起进步!

相关文章推荐

【C语言】判断字符类型的三种方法

【C语言】qsort()函数详解:能给万物排序的神奇函数

【C语言】整形数据和浮点型数据在内存中的存储

【C语言】结构体的大小是如何计算的(结构体对齐)



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA-6-47 购买汽车-代理模式

题目&#xff1a; 所谓代理模式&#xff0c;是指客户端(Client)并不直接调用实际的对象&#xff0c;而是通过调用代理(Proxy)&#xff0c;来间接的调用实际的对象。 已知有如下Buy_car接口&#xff0c;请编写其客户端子类People类为委托类&#xff0c;以及代理类ProxySale类&am…

SpringBoot可刷新图片验证码精简版

1. 导入Hutool工具类 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-captcha</artifactId><version>5.8.5</version> </dependency> 2. 编写控制器 RestController public class CodeController {Autowired…

Spring Boot 3.2 新特性之 JdbcClient

SpringBoot 3.2引入了新的 JdbcClient 用户数据库操作&#xff0c;JdbcClient对JdbcTemplate进行了封装&#xff0c;采用了 fluent API 的风格&#xff0c;可以进行链式调用。 自此&#xff0c;spring自带的数据库操作有了4种方式&#xff1a;JdbcTemplate、JdbcClient、Sprin…

Redis报错:JedisConnectionException: Could not get a resource from the pool

1、问题描述&#xff1a; redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 2、简要分析&#xff1a; redis.clients.util.Pool.getResource会从JedisPool实例池中返回一个可用的redis连接。分析源码可知JedisPool 继承了 r…

mysql常见的十种错误简要说明

错误1064 - SQL语法错误&#xff1a; 当SQL查询存在语法错误时会发生这种错误。请仔细检查查询以查找并纠正错误。 错误1045 - 拒绝访问&#xff1a; 当用户尝试连接到数据库但没有正确的权限或密码不正确时&#xff0c;会发生此错误。 错误2002 - 通过套接字无法连接到本地M…

BigDecimal的使用全面总结

BigDecimal BigDecimal可以表示任意大小&#xff0c;任意精度的有符号十进制数。所以不用怕精度问题&#xff0c;也不用怕大小问题&#xff0c;放心使用就行了。就是要注意的是&#xff0c;使用的时候有一些注意点。还有就是要注意避免创建的时候存在精度问题&#xff0c;尤其…

Spring全面详解(学习总结)

Spring FrameWork一、 前言二、IOC(控制反转)2.1 对于IOC的理解2.2如何使用IOC2.3配置文件的解读2.4IOC容器创建bean的两种方式2.5从IOC容器中取bean2.6bean的属性如果包含特殊字符 三、DI(依赖注入)四、Spring中的bean五、Spring中的继承六、Spring的依赖七、Spring读取外部资…

【咕咕送书 | 第六期】深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《linux深造日志》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 ⛳️ 写在前面参与规则引言一、为什么嵌入式系统需要虚拟化技术&#xff1f;1.1 专家推荐 二、本书适合谁&#x…

Git介绍和基础命令解析

Git基本操作指令 工作区和暂存区 Git管理的文件分为&#xff1a;工作区(本地的文件夹)&#xff0c;版本库(.git文件夹)&#xff0c;版本库又分为暂存区stage和暂存区分支master(仓库) 工作区>>>>暂存区>>>>仓库 git add把文件从工作区>>>…

WiFi的CSMA/CA竞争窗口流程简述

1、若站点最初有数据要发送&#xff08;不是发送不成功再进行重传的那种&#xff09;&#xff0c;且检测到信道空闲&#xff0c;在等待DIFS后&#xff0c;就发送整个数据帧。 2、否则&#xff0c;站点执行退避算法。一旦检测到信道忙&#xff0c;就冻结退避计时器。只要信道空…

Less 安装教程

文章目录 前言LESS的系统要求安装LESS例子输出Less编译css工具后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板…

error LNK2038: 检测到“RuntimeLibrary”的不匹配项 解决方法

问题&#xff1a; 我们在使用Visual Studio编程的时候偶尔会遇到以下三种报错&#xff1a; error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug” &#xff08;引用的是release模式&#xff0c;但设置成debug模式了…

开源博客项目Blog .NET Core源码学习(7:FluentValidation使用浅析)

开源博客项目Blog .NET使用FluentValidation模块定义数据验证项&#xff0c;具体而言&#xff0c;是在App.Application项目中定义验证类&#xff0c;设置验证规则&#xff0c;同时在App.Framwork项目中基于FluentValidation.AspNetCore包设置ASP.NET验证管道自动验证。   App…

操作系统——进程管理

文章目录 进程和线程进程的概念进程和程序的区别PCB(进程控制块)程序是如何运行的进程的特征进程的状态和状态转换五态模型 进程控制进程状态装换为啥需要保证原子性如何实现原语的原子性&#xff1f; 进程控制相关原语进程创建进程终止进程的阻塞和唤醒进程的唤醒进程的切换 进…

1603. 整数集合划分(2016年408数据结构算法题)

一、题目 1603. 整数集合划分https://www.acwing.com/problem/content/description/1605/ 二、算法的基本设计思想 由题意知&#xff0c;将最小的 个元素放在 中&#xff0c;其余的元素放在 中&#xff0c;分组结果即可满足题目要求。仿照快速排序的思想&#xff0c;基于枢…

Vue 2.0源码分析-Virtual DOM

Virtual DOM 这个概念相信大部分人都不会陌生&#xff0c;它产生的前提是浏览器中的 DOM 是很“昂贵"的&#xff0c;为了更直观的感受&#xff0c;我们可以简单的把一个简单的 div 元素的属性都打印出来&#xff0c;如图所示&#xff1a; 可以看到&#xff0c;真正的 DOM …

地铁在线售票vue票务系统uniAPP+vue 微信小程序

功能介绍 管理员 &#xff08;1&#xff09;管理员登录功能 &#xff08;2&#xff09;查看和修改线路信息 &#xff08;3&#xff09;减少线路 &#xff08;4&#xff09;修改价格&#xff08;5站3元 5-10 5元 10-15站6元 往上8元&#xff09; &#xff08;5&#xff09;删除用…

吾爱破解置顶的“太极”,太好用了吧!

日常工作和娱乐&#xff0c;都需要用到不同类型的软件&#xff0c;哪怕软件体积不大&#xff0c;也必须安装&#xff0c;否则到用时找不到就非常麻烦了。 其实&#xff0c;很多软件不一定一样不剩地全部安装一遍&#xff0c;一方面原因是用的不多&#xff0c;另一方面多少有点…

VS快捷键使用技巧(超全)

VS快捷键使用技巧&#xff08;超全&#xff09; 蒸汽小毛 蒸汽小毛 1.注释&#xff1a;CTRLKC 2.取消注释&#xff1a;CTRLKU 3.设置断点调试&#xff1a;F9&#xff0c;断点行不执行 4.回到上一个光标位置&#xff1a;CTRL 5.前进到下一个光标位置&#xff1a;CTRLShift …

Android设计模式--外观模式

弈之为术&#xff0c;在人自悟 一&#xff0c;定义 外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。提供一个高层次的接口&#xff0c;使得子系统更易于使用。 外观模式在开发中的使用频率是非常高的&#xff0c;尤其是在第三方的SDK里面&#xff0…