<>起因:

牛客网一道题,需要按行输入多组字母,然后按行输出其转换大小写后的字母,我们来探讨一下。

<>分析:

有两个要点需要注意,一是要按行多组输入,二是要字母大小写转换。首先是按行多组输入,我们可以用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
= '\n') continue;*/ //如果遇到按回车运行程序影响转换的情况,可以加上这条语句,跳过回车字符 '\n' if (input >= 'A'
&& input <= 'Z') { input = input + 32; printf("%c\n", input); } else if (input
>= 'a' && input <= 'z') { input = input - 32; printf("%c\n", 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("\n"); } else
if (input >= 'a' && input <= 'z') { input = input - 32; putchar(input); printf(
"\n"); } } return 0; }
运行结果

技术
©2019-2020 Toolsou All rights reserved,
在算法研究过程中如何进行算法创新七大排序算法(java代码)MYSQL中的索引与事务———javaweb(8)(面试必考)2022蓝桥杯JavaB组省赛试题网络安全-wifi攻防网络层协议——ICMP协议MySQL查询表中指定条件下的最新记录JavaSE笔记(一)Java基础语法mysql 查询条件之外的数据_mysql 查询符合条件的数据qt使用数据库sqlite