原题链接:C语言训练-大、小写问题
解题思路:
预计用fgets接受输入,假设用例来自标准输入端,读取一行长度不超过100的字符串,到'\n'为止:
#include<stdio.h> #include<ctype.h> #define N 110 int main(){ char i,s[N]; if(NULL!=fgets(s,N,stdin)){ for(i=0;s[i]!='\n'&&i<100;i++){ //按题意到'\n'为止 if(isupper(s[i])) //若为大写字符 putchar(tolower(s[i])); //改成对应的小写 else putchar(s[i]); } } return 0; }
结果是答案错误。以为是输入的串更长,于是改用getchar:
#include<stdio.h> int main(){ char a; while((a=getchar())!='\n'){ //读到'\n'为止 if(a>='A'&&a<='Z') putchar(a+32); //大写转小写 else putchar(a); } }
发生输出超限错误。没想到一错再错,是不是语言不对,仔细比较了和正确程序的区别,发现正确程序,在判断字符之前,都计算了串长、或者找到'\0'就知道结束了。
注意事项:
由于测试用例很可能不是用键盘,而是用程序将字符生成到文件中,所以在用fgets函数时,不要忽略出现在'\n'前的'\0',虽然'\0'很难从键盘输入到文件,也不能排除字符串在行尾前结束。
参考代码:
#include<stdio.h> int main(){ char a; while((a=getchar())!='\0'){ //读到字符串结束符'\0'为止 if(a>='A'&&a<='Z') putchar(a+32); else putchar(a); } }
若不能忽略'\0'之后的输入:
#include<stdio.h> #include<ctype.h> #define N 110 int main(){ char i,s[N]; if(NULL!=fgets(s,N,stdin)){ //接受输入行 for(i=0;s[i]!='\0'&&i<100;i++){ //找到首次出现的'\0'为止 if(isupper(s[i])) putchar(tolower(s[i])); else putchar(s[i]); } } return 0; }
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复