C/C++算法编程竞赛常用库函数篇:大小写

 

目录

前言

一、islower/isupper判断大小写函数

1.基本介绍

二、tolower和toupper转换大小写函数

1.基本介绍

三、ASCII码

1.大小写转换的原理

2.通过加减运算实现大小写转换

3.将int“转换”为char输出

总结



前言

这个栏目是对我算法学习过程的同步记录,我也希望能够通过这个专栏加深自己对编程的理解以及帮助到更多像我一样想从零学习算法并参加竞赛的同学。在这个专栏的文章中我会结合在编程过程中遇到的各种问题并提出相应的解决方案。当然,如果屏幕前的你有更好的想法或者发现的错误也欢迎交流和指出!不喜勿喷!不喜勿喷!不喜勿喷!这章的内容较为简单,那么事不宜迟,我们马上开始吧!


一、islower/isupper判断大小写函数

1.基本介绍

islower和isupper是C++标准库中的字符分类函数,用于检查一个字符是否为小写字母或大写字母。islower和isupper函数需包含头文件<cctype.h>,也可用万能头文件包含。函数的返回值类型为bool。

对于小写字母来说,其范围:'a'-'z'

对于大写字母来说,其范围:'A'-'Z'

以下是一段代码示例:

char c1 = 'a';
char c2 = 'A';
if(islower(c1))
{
    cout << "is lowercase letter" << endl;
}
else
{
    cout << "not a lowercase letter" << endl;
}
if(isupper(c2))
{
    cout << "is uppercase letter" << endl;
}
else
{
    cout << "not a uppercase letter" << endl;
}

二、tolower和toupper转换大小写函数

1.基本介绍

tolower(char c)可以将c转换为小写字母,如果c是小写字母则不进行操作。toupper函数同理。

下面是一段代码示例:

char c1 = 'A';
char c2 = 'b';
char lowercasec1 = tolower(c1);
cout << c1 << endl;
char uppercasec2 = toupper(c2);
cout << c2 << endl;

三、ASCII码

1.大小写转换的原理

ASCII码表实质上建立了字符与数字之间的映射。我们知道,在计算机底层的代码中,任何数据类型都是以0和1来表示的。二进制的基础决定了字符型整型同一性。那它们两者的区别是什么?

一个自然是存储空间不同。对于char类型,其只占用1byte。而整型int需要占用4byte。其二,计算机解析char类型时比处理整型多了一个映射表。这里学过单片机串口通信的同学可能感触会比较深。我们使用单片机收发数据是发出和接收的一般都是HEX数据。而当我们需要得到文本数据时,我们就需要接收方根据对应的编码表对HEX数据进行文本解析。由此,我们可以实现一些有意思的操作。

2.通过加减运算实现大小写转换

以下是代码示例:

char c1 = 'A';
char c2;
if(c1 >= 'A'&&c1 <= 'Z')
{
    c2 = c1 + 32; //对应大小写字母的ASCII编码值相差32
    cout << c2 << endl;
}
else if(c1 >= 'a'&&c1 <= 'z')
{
    c2 = c1 - 32; //对应大小写字母的ASCII编码值相差32
    cout << c2 << endl;
}
else
{
    cout << "invalid character!!" << endl;
}

ASCII码表中,大写字母的编码范围是65('A')-90('Z'),小写字母的范围是97('a')-122('z')

3.将int“转换”为char输出

这个问题是我的舍友提出的,我觉得很有意思,想放在这与大家分享。

他输入一个int类型的整数,想输出字符型的数字在屏幕上。我和其他人一开始的想法是进行强制类型转换,但发现并不是这样的。原因在前面我也提到了。有的人或许或有疑问:直接输出不就行了吗,哪有这么多事情。我承认你说的很对,但是我就是想试试。

那么我的思路是这样的:我们将int类型的整数中的每一位都取出来,之后将其变为字符形式打印出来。下面是我的代码(这里用的是我单片机项目里的代码,大家将类型修改一下即可):

//幂函数
uint32_t Serial_Pow(uint32_t X, uint32_t Y)
{
	uint32_t Result = 1;
	while (Y --)
	{
		Result *= X;
	}
	return Result;
}

//对于一个数,取某一位就是数字/10^x%10(/10^x是将右边去掉,%10是将左边去掉)
//若取的是百位,则x=2
//发送字符形式的数字(函数作用)
void Serial_SendNumber(uint32_t Number, uint8_t Length)
{
	uint8_t i;
	for (i = 0; i < Length; i ++)
	{
		//将参数从高位到低位依次发送
		//'0'的ASCII码对应值是0x30,这里是作为偏移从而以字符的形式输出数字
		Serial_SendByte(Number / Serial_Pow(10, Length - i - 1) % 10 + '0');
	}
}

总结

我也从没想过有关大小写的库函数还有这么多的花样。总而言之,如果你觉得这篇文章还不错,劳烦多多支持一下!码字不易,感谢你的观看!

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值