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 = '\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;
}

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42907822/article/details/114631764