牛客网题目大小写转换

整体代码放到最后面了

了解getchar和putchar

今天我要分享的是牛客网上大小写字母转换的题目,那我们先来了解一下getchar和putchar。

getchar和putchar都是C语言中的函数,getchar就是获取一个字符(从键盘),putchar就是打印一

个字符(打印在屏幕),那我们就有了以下代码。

#include
int main()
{
	int n = 0;
	n = getchar();
    putchar(n);
	return 0;
}

大小写转换

我们实现了输入和打印,那么问题来了,大小写怎么转换呢?大家都知道,我们可以在键盘上敲各种各样的字符,但我们说计算机中存储的是二进制啊,那我们字符怎么存啊,那么字符虽然没法存,那我们能不能给他们编个号啊,就比如A - 65   a - 97(大写A是65,小写a是97)这个时候每个字符都有自己的编号,那我们存的时候不存这个字符,而是把他的编号转换成二进制存到计算机里面。这个地方给每个字符都编了一个号之后呢这张表就是ASCII码表,这种编码方式就是ASCII编码,每个字符所对的值就是ASCII码值。

牛客网题目大小写转换_第1张图片

 那么我们就基本了解了,大写A和小写a相差32,大写B和小写b相差32,我们找到一个规律,大写字母加上32不就等于小写字母了嘛。我们的代码可以进一步推进:

#include
int main()
{
	int n = 0;
	while (n = getchar())
	{
		putchar(n + 32);
		getchar();
	}
	return 0;
}

多组输入和输出

我们写完上面的代码之后发现,这个代码好像只能接收一个字符,没错,这就是我接下来要讲的多组输入和输出,我们能不能直接用while循环呢,可以,下面是代码实现:

牛客网题目大小写转换_第2张图片

 细心的朋友可能发现了,他让我们只打印对应的小写字母,为什么后面会出来一个*号呢,那么我来解释一下:

牛客网题目大小写转换_第3张图片

 我们要先知道getchar的工作原理,我们要接收一个字符,是不是要从键盘敲一个字符,那我们getchar工作的时候是直接从键盘去拿数据的吗,当然不是,getchar和键盘直接还有一个输入缓冲区,我们在运行代码的时候不输入数据的时候是不是有个光标在一直闪,因为getchar在看输入缓冲区中有没有数据,因为输入缓冲区里面没有数据,所以他就在一直闪,他在等我们从键盘上输入点东西,我们现在开始敲了,假如我们敲了一个大写A,他有送给getchar吗?有放到缓冲区里面吗?没有!这时候怎么办呢?我们要按一个回车键,把A送到输入缓冲区里面,那我们现在缓冲区里面放了什么呢?对,大写A,还有\n(回车键)。对我们getchar来说,他一次读一个字符,当我们第一次循环把小写a打印出来之后他又循环回去了,这一次他再去看缓冲区里面有没有数据,里面还有一个\n,这一次getchar等待都没有等待,直接就把\n拿走了,我们可以看一下ASCII码表,\n代表的ASCII码值是10,10+32=42,42代表的字符是*,所以会打印出来*。看似我们输入了一个字符,却打印出来两个字符呢,是因为A的后面还敲了一个换行(\n)。这个问题其实很好解决, 下面直接看代码:

#include
int main()
{
	int n = 0;
	while (n = getchar())
	{
		putchar(n + 32);
		getchar();
	}
	return 0;
}

其实我们循环里面再用getchar接收一次就好了,循环里面的getchar接收的是\n,他不会传给任何变量,所以他只是用来接收一个字符的,这样就达到我们想要的效果了。

深入了解getchar,并且了解怎么让这个循环停下来

 如果我们直接这样提交的话肯定会出问题,因为我们的循环根本停不下来,直接就成死循环了,那我们怎么让他读取结束呢,那么我们就要深入了解一下这个getchar了

 这个是返回值描述(当遇到文件读取错误或文件结束的时候,就会返回EOF)

#include
int main()
{
	int n = 0;
	while ((n = getchar()) != EOF)
	{
		putchar(n + 32);
		getchar();
		printf("\n");
	}
	return 0;
}

这个就是整体的代码,这里加上printf("\n")只是一个换行的作用,不然提交不上去。

你可能感兴趣的:(c++,开发语言)