大小写字母、数字与ASCII间的关系

大小写字母、数字与ASCII间的关系

在C语言中,常常需要判断某一个字母是大写字母,小写字母,或者是数字,因此就涉及到一些字母的ASCII码的运算。
在这里插入图片描述

1. 常用ASCII表(一定要牢牢记住)

0~9 : 48~57
A-Z : 65~90
a-z : 97~122

// 例如用整型输出字符,则会自动转化为int类型,即输出对应的ascii码
char c = 'a';
printf("%d", c);
// 输出结果为97

2. 字母与数字之间的转化

大家常见的需求通常如下这里希望大家注意,不要搞混淆了

  • 判断是否为大小写字母
  • 判断是否为数字
  • 统计大小写字母、数字出现的次数
  • 大小写字母转化

首先,判断是否为写字母

char c = 'B';
if (c >= 65 && c <= (65+25)){
	printf("这是一个大写字母");
}

判断是否为写字母

char c = 'm';
if (c >= 97 && c <= (97+25)){
	printf("这是一个小写字母");
}

判断是否为数字

char c = '9';
// 方法1: 通过减去'0'直接转化为整型对应的数值
if (c - '0' >= 0 && c - '0' <= 9){
	printf("这是一个数字");
}
// 方法2: 通过记住了对应的ASCII码,直接进行比较是否在对应区间内
if (c >= 48 && c  <= 57){
	printf("这是一个数字");
}

大小写字母转化

// 根据大小写之间的字母差为32,先判断为为大写还是小写,再转化

char s[] = "Hello";
// 需要注意的是:计算得到的长度为数组真实长度+1,因为有一个'\0'结尾
int len = sizeof(s) / sizeof(s[0]);  // 6

// 开始判断
int diff = 'a' - 'A';   // 大小写字母之间的ASCII的差:32
for(int i = 0; i < len; i++){
	if (s[i] >= 65 && s[i] <= 90){
		// s[i]为大写字母,那么转化为小写
		s[i] = s[i] + diff;
	}else if(s[i] >= 97 && s[i] <= 122){
		// s[i]为小写字母,那么转化为大写
		s[i] = s[i] - diff;
	}
	printf("%c", s[i]);
}

3. 字符串长度补充

相信大家也很疑惑,为啥s数组的长度比真实长度多1,为此做了如下输出实验

char s1[5] = "Hello";
char s2[] = "Hello";

int length1 = sizeof(s1) / sizeof(s1[0]); 
int length2 = sizeof(s2) / sizeof(s2[0]); 
printf("%d, %d", length1, length2);
printf("%s, %s", s1, s2);

// 输出结果为:
5, 6
Hello, Hello

这是因为不置顶数组长度,那么为自动加一个’\0’作为结尾符
但是输出结果一样哈,不会输出\0

4. 总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值