原题链接:C语言考试练习题_保留字母
题目描述:
编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
要求输入一个长度小于80的字符串。
解题思路:
要求题目要求输入一个长度小于80的字符串,那我定义长度为80的字符数组,就不用考虑长度问题了。
定义两个字符数组。str[80] result[80]
输入字符串: gets(str)
判断str的中满足是英文条件的全部放到result字符数组中:
result[j++]=str[i];
最后输出结果即可:
puts(result);
题目要求
注意事项:
注意长度吧!80
参考代码:
#include <stdio.h>
#include <string.h>
int main()
{
char str[80],result[80];
gets(str);
for(int i=0,j=0; i<strlen(str); i++)
{
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
{
result[j++]=str[i];
}
}
puts(result);
}解题思路:
首先还是定义长度为80的字符数组,免去长度问题,注: 本题OJ系统不严谨,不考虑长度也能通过。
不借助临时字符数组转存,由于字符串就是每个字符组成,每当有满足条件的字符就当做单个字符输出即可!
参考代码:
#include <stdio.h>
#include <string.h>
int main()
{
char str[80];
gets(str);
for(int i=0; i<strlen(str); i++)
{
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
{
putchar(str[i]);
}
}
return 0;
}解题思路:
前面说过,OJ系统判断不是太严谨,所有参加测试的字符串长度都没有超过80。所以可以不用考虑长度因素。
参考代码:
#include <stdio.h>
int main()
{
char ch;
while((ch=getchar())!=EOF)
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
putchar(ch);
}
}
return 0;
}测试环境:
Windows & Debian Kali
测试结果:

0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> #define is_string(x) ('a'<=x&&x<='z')||('A'<=x&&x<='Z') int main() { char str[80]; gets(str); for(int i=0;str[i]!=0;i++) if(is_string(str[i])) printf("%c",str[i]); printf("\n"); return 0; }#include <stdio.h> #include <string.h> int main(void) { char str[80] = {0,}; int i = 0, len = 0; gets(str); len = strlen(str); for (i = 0; i < len+1; ++i) { if (str[i] == '\0')break; if (('A' <= str[i] && str[i] <= 'Z') || ('a' <= str[i] && str[i] <= 'z'))continue; strcpy(&str[i], &str[i+1]); str[len--] = 0; --i; } puts(str); return 0; } 为什么这样错误50%呢?