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

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

方法一:库函数法

📌小写转换大写:toupper()函数

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

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

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

int toupper ( int c );

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

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


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


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


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

如:


📌大写转换小写:tolower()函数

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

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

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

同样也会发生整形截断

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

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


方法二:加减32法

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

ASCII码表:

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

如下:

#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;
}

代码运行效果:

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


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

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

如下:

#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.

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

代码如下:

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;
}

代码运行效果如下:

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


总结

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

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




相关文章
|
6天前
|
存储 编译器 C语言
【C语言】判断字符类型的三种方法
【C语言】判断字符类型的三种方法
87 0
|
6天前
|
C语言
你知道C语言中实现有序序列并序输出的2种方法吗?
你知道C语言中实现有序序列并序输出的2种方法吗?
|
6天前
|
C语言
【C语言】大小写字母的相互转化:多种方法解析及原理说明
【C语言】大小写字母的相互转化:多种方法解析及原理说明
129 0
|
6天前
|
C语言
每天一道C语言编程(数字转字母,字母转数字)
每天一道C语言编程(数字转字母,字母转数字)
5 0
|
6天前
|
C语言
每天一道C语言编程:求N以内的素数(普通方法+优化方法)
每天一道C语言编程:求N以内的素数(普通方法+优化方法)
8 0
|
6天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
30 5
|
6天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
16 3
|
6天前
|
传感器 人工智能 物联网
【C 言专栏】C 语言与硬件交互的方法
【5月更文挑战第4天】C 语言在硬件交互中扮演关键角色,主要通过直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射I/O和设备驱动程序开发。挑战包括硬件多样性、实时性要求和错误处理。随着物联网和人工智能发展,C语言与硬件交互的需求增加,未来将面临更多新硬件和技术的挑战。本文旨在帮助读者理解和掌握这一领域的知识,以实现更高效的硬件互动。
【C 言专栏】C 语言与硬件交互的方法
|
6天前
|
算法 C语言
【C 言专栏】C 语言文件操作的技巧与方法
【4月更文挑战第30天】本文介绍了C语言文件操作的关键技巧,包括文件的打开与关闭(使用`fopen`和`fclose`函数),读取(`fgetc`、`fgets`和`fread`)和写入(`fputc`、`fputs`和`fwrite`)操作。此外,还讨论了文件指针移动(`fseek`)、错误处理、文件权限和格式等问题。文中提供了一个简单的读写文件的示例,并提到了高级技巧如随机访问、文件缓冲和截断。掌握这些技能将有助于提升C语言编程中的文件处理能力。
|
6天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)