一. 概念引入
在C语言中,对于每一个字符有其对应的ASCLL值,但为什么要有这个表呢?
信息在计算机内是使用二进制的形式表示,我们深入到计算机的最底层,其信息的表示方式只有0和1,这种表示方法人是很难理解的,如果我们屏幕上看到的只有0和1,有几人能看明白呢?如果计算机只能识别0和1,那我们所能理解的信息又如何才能让计算机明白呢?
所以,为了方便人与计算机之间能够进行信息的交换,人们编制了一个统一的信息交换码——ASCLL码表,全称是“美国信息交换标准码。
二. 字母大小转换
通过上面的ASCLL我们可以得知,A ~ Z对应的十进制值为65 ~ 90,而a ~ z对应的值为97 ~ 122,而每个大写字母与其对应的小写字母的值相差32,所以我们可以通过加减32,进行大小写的转化。
int main(){
char ch;
while (~scanf("%c", &ch)){
getchar();
ch += 32;
putchar(ch);
putchar('\n');
}
}
三. 课后习题
3.1 转换成小写字母
709. 转换成小写字母
我们只需将所有大写字母转化即可。
代码如下:
char * toLowerCase(char * s){
for(int i = 0; i < strlen(s); i++){
if(s[i] >= 'A' && s[i] <= 'Z'){
s[i] += 32;
}
}
return s;
}
3.2 检测大写字母
520. 检测大写字母
分析:
不符合规则的单词有:
- 首字母为大写,后面的字母也有一部分大写。
- 首字母为小写,后面出现有大写字母。
注意如果是单个字符,不管大小写都符合规则,并且如果全为大写或全为小写,也符合规则。
代码如下:
bool detectCapitalUse(char * word){
int len = strlen(word);
if(len == 1){
return true;
}
int n = 0;
for(int i = 0; i < len; i++){
if(word[i] >= 'A' && word[i] <= 'Z'){
n++;
}
}
if(word[0] >= 'A' && word[0] <= 'Z' && n > 1 && n < len){
return false;
}
else if(word[0] >= 'a' && word[0] <= 'z' && n > 0){
return false;
}
return true;
}
四. 总结
字符的大小写转化,我们只需牢记其ASCLL值得范围,以及大小写之间的值差为32.