【C语言】五种方法实现C语言中大小写字母的转化

这篇具有很好参考价值的文章主要介绍了【C语言】五种方法实现C语言中大小写字母的转化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换


📝tolower/toupper函数

🌉tolower

tolower函数是C标准库中用于将字母从大写转换为小写的函数。
函数原型:

int tolower(int c);
c: 需要转换的字符,必须是unsigned char类型或可隐式转换为unsigned char类型的值。

返回值:
返回转换后的小写字符。如果c不是一个字母,则返回原值c。
返回值类型为int,这是为了能够返回任何可能的字符值。

注意:
c必须是unsigned char类型或能隐式转换为unsigned char,如char、int等。
返回值类型为int,是为了能够返回任何可能的字符值,包括非字母字符本身。
如果c不是一个字母,函数直接返回c而不进行转换。

代码:

# define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <ctype.h>

int main() 
{
    char uppercase = 'A';
    char lowercase = tolower(uppercase);
    printf("%c 转为小写是:%c\n", uppercase, lowercase);
    return 0;
}

c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换

🌠 toupper

toupper函数是C标准库中用于将字母从小写转换为大写的函数。

int toupper(int c);  

和tolower函数一样:

  • 参数c类型为int,需要转换的字符可以隐式转换为unsigned char

  • 返回值类型为int,返回转换后的大写字符或原字符c如果c不是字母

toupper函数和tolower函数的参数和返回值类型是完全相同的:
int tolower(int c);
int toupper(int c);
两者都以int类型作为参数和返回值,目的是为了能处理任何可能的字符值。

#include <stdio.h>
#include <ctype.h>

int main() 
{
    char lowercase = 'a';
    char uppercase = toupper(lowercase);
    printf("%c 转为大写是: %c\n", lowercase, uppercase);
    return 0;
}

c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换

🌠 ASCII码关系

通过ASCII码表来进行大小写字母的转换。ASCII码表中小写字母的范围是97到122,大写字母的范围是65到90,它们之间相差32。因此,可以通过加上或者减去32来进行大小写字母的转换。

#include <stdio.h>

char to_uppercase(char c) 
{
    if (c >= 'a' && c <= 'z') 
    {
        // 如果是小写字母,则将ASCII码值减去32转换为大写字母
        return c - 32;
    }
    else 
    {
        return c;
    }
}

char to_lowercase(char c) {
    if (c >= 'A' && c <= 'Z') 
    {
        // 如果是大写字母,则将ASCII码值加上32转换为小写字母
        return c + 32;
    }
    else 
    {
        return c;
    }
}

int main() 
{
    for (char lowercase = 'a'; lowercase <= 'z'; lowercase++)
    {
        char uppercase = to_uppercase(lowercase);
        printf("%c 小转大: %c\n", lowercase, uppercase);
    }

    for (char uppercase2 = 'A'; uppercase2 <= 'Z'; uppercase2++)
    {
        char lowercase2 = to_lowercase(uppercase2);
        printf("%c 大写转小写: %c\n", uppercase2, lowercase2);
    }
    return 0;
}

🌉位操作

二进制是由0和1组成的数字系统。在位运算中,&(按位与)、|(按位或)和~(按位取反)是常用的操作符。
这些运算符在二进制中的作用:

  • 按位与(&):对两个二进制数的对应位进行逻辑与操作,只有当两个位都是1时,结果才为1,否则为0。
  • 按位或(|):对两个二进制数的对应位进行逻辑或操作,只要有一个位是1,结果就为1。
  • 按位取反(~):对一个二进制数的每一位进行取反操作,即0变为1,1变为0。

现在我们用二进制来解释一下如何使用这些操作符进行大小写字母的转换。

假设我们有一个字符 'A',对应的ASCII码为65,其二进制表示为 01000001
小写字符‘a’为c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换

  1. 小写字母转换为大写字母:我们想要将其转换为小写字母 'a'

    我们知道大写字母和小写字母的ASCII码值之间差32。因此,我们可以通过将65的第6位(从右往左数,从0开始)设置为0来将其转换为小写字母。我们可以使用按位或操作符 | 来实现这一点。

    原始 ASCII:   01000001
    32的二进制:   00100000  <-- 这是32的二进制表示,它的第6位是1,其他位都是0
    按位或:       01100001  ('a'的ASCII码)
    

    这样,我们就成功地将大写字母 'A' 转换为小写字母 'a'

char toUpper(char c) 
{
    if (c >= 'a' && c <= 'z')
        return c & ~32; // Clear the 6th bit to convert to uppercase
    else
        return c;
}
  1. 大写字母转换为小写字母:我们想要将其转换为大写字母 'A'

    我们知道大写字母和小写字母的ASCII码值之间差32。因此,我们可以通过将小写字母的第6位设置为0来将其转换为大写字母。我们可以使用按位与操作符 & 和按位取反操作符 ~ 来实现这一点。

    原始 ASCII:   01000001
    按位取反:     10111110  <-- 这是65的按位取反结果
    32的二进制:   00100000  <-- 这是32的二进制表示,它的第6位是1,其他位都是0
    按位与:       01000000  ('A'的ASCII码)
    

    这样,我们就成功地将小写字母 'a' 转换为大写字母 'A'

#include <stdio.h>

char toLower(char c) 
{
    if (c >= 'A' && c <= 'Z')
        return c | 32; 
    else
        return c;
}

🌉宏定义

32的16进制也是0x20,也可以这样用

#define TOLOWER(c) ((c) | 0x20) 
#define TOUPPER(c) ((c) & ~0x20)
int main()
{
	char c = 'A';
	c = TOLOWER(c); // c becomes 'a'
	printf("%c\n", c);
	char d = 'a';
	d = TOUPPER(d); // d becomes 'A'
	printf("%c\n", d);
}

c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换

🌠小巧第五位

上面了解位运算,并且用的是32的二进制进行第6位操作,还要取反(~)是不是觉得有点繁琐,能不能一步到位呢,这里有个小巧比较,以下用的是第五位进行操作:

  1. 小转大
#include <stdio.h>

char to_uppercase(char c) 
{
    // 如果字符是小写字母,将第5位(32)置为0,即转换为大写字母
    return (c & 0xdf);
}

首先,我们知道大写字母的ASCII码值范围是65到90,而小写字母的ASCII码值范围是97到122。它们之间的差值恰好是32。

在ASCII码中,将小写字母转换为大写字母,实际上就是将对应字符的第5位(从右往左数,从0开始)置为0。

为了实现这一点,我们使用了按位与运算符 &,并将字符 c 与十六进制数 0xdf 进行按位与操作。0xdf 的二进制表示是 11011111,将其与字符 c 进行按位与操作,可以确保字符的第5位被置为0。

- 小写字母 `'a'` 的ASCII码值是97,其二进制表示为 `01100001`。
- 我们将其与 `0xdf` 进行按位与操作,
- 得到的结果是 `01100001 & 11011111 = 01000001`,
这就是大写字母 `'A'` 的ASCII码值。
  1. 大转小
char to_lowercase(char c) 
{
    // 如果字符是大写字母,将第5位(32)置为1,即转换为小写字母
    return (c | 0x20);
}
  • 类似地,将大写字母转换为小写字母实际上就是将对应字符的第5位置为1。
  • 为了实现这一点,我们使用了按位或运算符 |,并将字符 c 与十六进制数 0x20 进行按位或操作。0x20 的二进制表示是 00100000,将其与字符 c 进行按位或操作,可以确保字符的第5位被置为1。
- 大写字母 `'A'` 的ASCII码值是65,其二进制表示为 `01000001`。
- 我们将其与 `0x20` 进行按位或操作,
- 得到的结果是 `01000001 | 00100000 = 01100001`,
- 这就是小写字母 `'a'` 的ASCII码值。
int main() 
{
    char lowercase = 'l';
    char uppercase = to_uppercase(lowercase);
    printf("%c converted to uppercase is: %c\n", lowercase, uppercase);

    char uppercase2 = 'G';
    char lowercase2 = to_lowercase(uppercase2);
    printf("%c converted to lowercase is: %c\n", uppercase2, lowercase2);

    return 0;
}

c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换
通过这种方法,我们可以在不使用 <ctype.h> 中的函数的情况下,实现大小写字母之间的转换。


🚩总结

c大小写转换代码,我爱C语言:从入门到精通,c语言,开发语言,位运算,大小写字母转换文章来源地址https://www.toymoban.com/news/detail-843473.html

到了这里,关于【C语言】五种方法实现C语言中大小写字母的转化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://blog.csdn.net/a_hong_sen/article/details/136739063

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言数据类型】字符类型char如何使用?字母大小写转换?

    c语言基本数据类型包括 1.常量                                        2.整型和浮点型                                        3. 字符型 这篇文章来记录一下自己学习字符类型char时的笔记以及心得 (1).定义: char是用于C或C++中定义字符型变量,只占一个字节 (2).范围

    2024年02月06日
    浏览(11)
  • 【C++】STL 算法 ⑦ ( 二元谓词使用场景 - 大小写不敏感 set 集合 | tolower 函数 - 将字符转为小写字母 | 基于 tolower 实现大小写不敏感的比较函数对象 )

    本篇博客中 , 实现一个 set 集合 , 存放 英文字母 组成的字符串 , 且 大小写不敏感 ; 实现的方法 : 自定义字符串 对比排序规则 , 先 将 字符串 都转为小写字母 , 然后进行对比 ; tolower 函数是 C / C++ 标准库 中的函数 , 其作用是 将 字符从 大写形式 转换为 小写形式 , 该函数定义

    2024年02月02日
    浏览(14)
  • C++——转换字母的大小写

    首先我们要知道,C++字符的所有转换形式都是依照ASCII码来的。 转换规则:大写字母=小写字母-32 程序实例 程序代码 运行结果   如果要将大写字母转换为小写字母,则小写字母=大写字母+32  

    2024年02月07日
    浏览(14)
  • java中字母、字符串,输入小写输出大写,输入大写输出小写、大小写转换

    思路: 1、利用“大小写字母之间正好相差32”这一特点                                                       2、用  toLowerCase()、toUpperCase() 字符串自带的方法  提示: Java中没有.nextChar()。 所以要读取char,我们使用  .next().charAt(0)  1、 输入小写输

    2024年02月07日
    浏览(12)
  • 26个字母大小写的ASCII码值

    \\\'0\\\'=48; 小写: a → 97,b → 98,c → 99,d → 100,e → 101,f → 102, g → 103,h → 104,i → 105,j → 106,k → 107,l → 108, m → 109,n → 110,o → 111,p→ 112,q → 113,r → 114, s → 115,t → 116,u → 117,v → 118,w → 119,x → 120,y → 121,z → 122 大写: A → 65,B → 66,C

    2024年02月11日
    浏览(11)
  • JSON.toJSONString首字母大小写问题

    开发过程中遇到的,对象转字符串时,有个字段首字母是大写的,转换之后就变成了小写,在这里记录下 不管是自带JSON,还是阿里的fastJson,都会将属性的字段首字母改为小写 通过注解 @JSONField 可以解决该问题,如下; 优点:少量的话简单方便 缺点:入侵性强,懒得每个加

    2024年02月09日
    浏览(13)
  • 【Excel】WPS单元格快速转换表格字母大小写

    使用WPS Office打开表格,选择需要处理的单元格或单元格区域。 依次点击「会员专享」选项卡 —「智能工具箱」。 再点击「格式」—「大小写」,选择一种大小写转换方式即可。

    2024年02月08日
    浏览(13)
  • 【Java 笔记】使用Fastjson2时,对象转json首字母大小写问题

    开发环境: 一、JSON 转 Object 1.问题: 2.解决方案 二、Object转 JSON 三、SpringBoot设置fastjson2 为默认 pom.xml 2. 配置类 四、FastJson2 注解 默认 2. @JSONType 类注解 3. @JSONField(name = \\\"othername\\\") 属性注解 五、思考问题 Java 对象为什么需要序列化? 为什么对象没有实现Serializable接口,也可以

    2024年02月16日
    浏览(9)
  • 用element UI 写一个密码表单验证必须为大小写字母+数字+@#$等特殊符号

    你好!这是一个示例代码,用于在 Element UI 中使用密码表单验证必须为大小写字母、数字和 @ 符号。 在这个示例代码中,我们使用了 Element UI 的 el-form 、 el-form-item 和 el-input 组件。 el-form 组件用于包装表单元素, el-form-item 组件用于包装单个表单项, el-input 组件用于创建单行

    2024年02月06日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包