左嘉


私信TA

用户名:zuojia

访问量:88570

签 名:

Jz

等  级
排  名 5
经  验 34534
参赛次数 226
文章发表 72
年  龄 40
在职情况 在职
学  校 北京理工大学
专  业

  自我简介:

解题思路:
预计用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 人评分

  评论区

  • «
  • »