c语言中字母大小写转换的两种办法
起因:
牛客网一道题,需要按行输入多组字母,然后按行输出其转换大小写后的字母,我们来探讨一下。
分析:
有两个要点需要注意,一是要按行多组输入,二是要字母大小写转换。首先是按行多组输入,我们可以用while循环获取多组输入,scanf()或者getchar()函数可以获取输入值;然后字母的大小写转换需要根据ASCLL表来分析,我们可以在表中看到大小写字母的十进制其实是相差32的,因此只需要将输入的字母做十进制±32运算即可实现转换。
在此你可能有疑问,字母属于char类型,32是int类型,这能运算吗? 答案是可以的。在运算的时候,char类型是可以转换为int类型的(计算过程中自定进行转换,不需要强制转换的)。计算机通过查找对应字符变量值的ASCII值(十进制),利用其在ASCII里的对应值进行加减运算,当然两个char类型的运算也需要进行这样的转换。
解决方案:
解释完原理后我们就可以用代码实现啦
方法一: 我们用scanf()函数接收输入,然后printf输出
int main() { int input = 0; while ((scanf("%c", &input)) != EOF) { /*if (input = ) continue;*/ //如果遇到按回车运行程序影响转换的情况,可以加上这条语句,跳过回车字符 if (input >= A && input <= Z) { input = input + 32; printf("%c ", input); } else if (input >= a && input <= z) { input = input - 32; printf("%c ", input); } } return 0; }
程序运行后
方法二: 用getchar()函数获取输入,用putchar()输出 可能部分朋友不了解getchar()函数,我们可以看一下库描述
其实简单说就是逐个获取键盘输入的字符,返回的值就是ASCLL码十进制的值,读取错误则返回EOF,putchar()原理是类似的,下面是实现:
int main() { char input = 0; while ((input = getchar()) != EOF) { if (input >= A && input <= Z) { input = input + 32; putchar(input); printf(" "); } else if (input >= a && input <= z) { input = input - 32; putchar(input); printf(" "); } } return 0; }
运行结果