解题思路:
预计用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语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:504 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:760 |
演讲大赛评分 (C语言代码)浏览:1696 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:416 |
简单的a+b (C语言代码)浏览:600 |
printf基础练习 (C语言代码)浏览:2268 |
JAM计数法 (C语言代码)浏览:721 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:487 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:669 |