题目描述:

编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。

要求输入一个长度小于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

测试结果:

微信图片_20190129180932.png










点赞(4)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

wudi 4年前 回复TA
#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;
}
一条咸鱼 4年前 回复TA
@foxnull2 好像是strcpy()的问题,要先将str[i+1]里的内容复制到一个新的字符串中,再把新字符串的内容复制到str[i]。这样就OK了
foxnull2 5年前 回复TA
#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%呢?
aaas 5年前 回复TA
膜拜大佬