C语言中大小写字母的转化

我们在C语言入门的时候都会遇到要求写大小写转换的题目,所以下面这篇文章主要给大家介绍了关于C语言字母转换大小写的3种方法,文中给了详细的代码示例,需要的朋友可以参考下

目录

方法一:库函数法

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

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

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

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

|---|----------------------------------|
| 1 | 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 即可,因此我们自己写一个函数 负责将传入的符合小写字母区间 的字母转换成大写字母,其余不符合的返回原值,代码实现逻辑教简单,如下:

|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<stdio.h> int my_toupper(``int ch) { ``if (ch >= 97 && ch <= 122) ``return ch - 32; ``else ``return ch; } int main() { ``char ch = ``'a'``; ``ch=my_toupper(ch); ``printf``(``"%c"``, ch); ``return 0; } |

代码运行效果:

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

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

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

|-------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<stdio.h> int my_tolower(``int ch) { ``if (ch >= 65 && ch <= 90) ``return ch + 32; ``else ``return ch; } int main() { ``char ch = ``'A'``; ``ch = my_tolower(ch); ``printf``(``"%c"``, ch); ``return 0; } |

代码运行效果:

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

当不符合条件时,返回原值:

方法三:位运算法

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

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

反之用97^32=65.

因此该方法可以实现传入大写字符转换成小写字符传入小写字符转换成大写字符的效果,代码如下:

|----------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | int my_move(``int ch) { ``if (((ch >= 97) && (ch <= 122)) || ((ch >= 65) && (ch <= 90))) ``return ch ^ 32; ``else ``return 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; } |

代码运行效果如下:

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

相关推荐
@老蝴8 小时前
C语言 — 通讯录模拟实现
c语言·开发语言·算法
学习噢学个屁14 小时前
基于STM32汽车温度空调控制系统
c语言·stm32·单片机·嵌入式硬件·汽车
共享家952715 小时前
c语言(重点)
c语言·数据结构·算法
iCxhust15 小时前
汇编字符串比较函数
c语言·开发语言·汇编·单片机·嵌入式硬件
我命由我1234517 小时前
STM32 开发 - 中断案例(中断概述、STM32 的中断、NVIC 嵌套向量中断控制器、外部中断配置寄存器组、EXTI 外部中断控制器、实例实操)
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·嵌入式
宋一平工作室18 小时前
单片机队列功能模块的实战和应用
c语言·开发语言·stm32·单片机·嵌入式硬件
SY师弟18 小时前
台湾TEMI协会竞赛——2、足球机器人组装教学
c语言·单片机·嵌入式硬件·机器人·嵌入式·台湾temi协会
whoarethenext18 小时前
使用 C/C++的OpenCV 将多张图片合成为视频
c语言·c++·opencv
梦境虽美,却不长20 小时前
C语言 学习 宏命令(预处理) 2025年6月9日14:41:39
c语言·开发语言·学习
时时三省20 小时前
【时时三省】(C语言基础)将外部变量的作用域扩展到其他文件
c语言