牛客网 BC28-大小写转换(你好,2022)

Posted ♪Yiiiiiiiiiiiiii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网 BC28-大小写转换(你好,2022)相关的知识,希望对你有一定的参考价值。

题目描述

实现字母的大小写转换。多组输入输出。

输入描述:

多组输入,每一行输入大写字母。

输出描述:

针对每组输入输出对应的小写字母。 

示例1

输入

A
B

输出

a

思路:当看到这个题时,通过“大小写转换”可以立马反应出,通过ASCII 码进行转换,即为:大写字母+32=小写字母。

即可初步有如下代码的思路:

#include<stdio.h>
int main()

   int ch=0;
   ch=getchar();
   putchar(ch+32);
   return 0;

易得,如上的代码是远远不足的,它只是一个大概的方向。上式代码有一个缺点:它只能接收一个字符,不会再处理第二个。所有此代码不满足题意。


(强调!)这道题目要的是多组输入,所以我们可以考虑采用while循环!!!有了这个思路,我们可以对第一次代码进行初步修改,可得如下代码:

#include<stdio.h>
int main()

  int ch=0;
  while(ch=getchar())
  
    putchar(ch+32);
  
  return 0;

 在编译器中输入上式代码,对其进行编译运行后,输入A,得到如图所示的情况:

依次输入A,B,C  后情况如图所示:

此时输出的*,是怎么回事呢?

我们用到了getchar函数去接收字符,并且我们通过键盘进行 输入,而 getchar与键盘之间有一个名为“输入缓冲区”的部分,起初getchar看输入缓冲区,内容为空,然后光标闪烁,等待从键盘输入写东西到输入缓冲区。此时键盘敲一个 A ,此时字符‘A’并没有送给getchar,也没有进入输入缓冲区,此时要按回车去触发getchar去读取字符,此时缓冲区中为'A'与'\\n',相当于放入了两个字符,而对于getchar一次只读一个字符,即将'A'读走,因为'A'不为0,所以'A'进入循环,最后输出a。之后getchar再次进行读取,此时缓冲区中余'\\n',将'\\n'拿走,放入ch中。

通过查ASCII码表可知,'\\n'为10,而10+32=42,42对于的字符为'*'。


getchar可以拿走A,   getchar也可以拿走\\n。

2.0实际版本的代码:

#include<stdio.h>
int main()

  int ch=0;
  while(ch=getchar())
  
    putchar(ch+32);
    getchar();//读取\\n
  
  return 0;

 将上述代码赋值到牛客网题目下,仍然会报错:

 

此时可知上述代码漏洞: 可以一直输入,停不下来!!!无法读取结束


getchar函数返回值描述: (补充资料)

 代码升级3.0,让代码可以停下来,不至于让其死循环:

#include<stdio.h>
int main()

  int ch=0;
  //EOF--end of file
  while((ch=getchar())!=EOF)
  
    putchar(ch+32);
    printf("\\n");//注意换行
    getchar();//读取\\n
  
  return 0;

 

 HAPPY ENDING!!!

 

 

以上是关于牛客网 BC28-大小写转换(你好,2022)的主要内容,如果未能解决你的问题,请参考以下文章

网易2017秋招编程题集合-牛客网

牛客网刷题——JAVA

剑指Offer(牛客网) 二叉树的镜像

牛客网-编程初学者入门训练

牛客网-编程初学者入门训练

剑指Offer(牛客网) 链表中环的入口结点