🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### 题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。 注意:如果上档键坏掉了,那么大写的英文字母无法被打出。 输出格式: 在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。 输入样例: 7+IE. 7_This_is_a_test. 输出样例: _hs_s_a_tst ### 分析(伪代码和知识点) 1.定义两个输入字符数组s1,s2.s1为坏键,s2为应该输入的文字.本题是要求是输出s2中的文字并且不包含s1中的文字和条件。 本题的条件为: (1)s1中的坏键在s2中是不能输出的(需考虑坏键中的字母分为大小写) (2)s1如果出现"+"则说明上档键不能用,则大写字母就不能使用.所以s2中的大写字母是不能输出的. 2.本代码中运用了一个strchr函数,该函数原型:extern char *strchr(char *s,char c); 该函数是要返回c在s中的首次出现位置的指针。 ### 代码 ``` #include<stdio.h> #include<string.h> int main() { char s1[100010]={0}; char s2[100010]={0}; char s3[100010]={0};// 把s1中的大写字母转化为小写字母记录下来 int i,j=0,len; gets(s1); gets(s2); len=strlen(s2); for(i=0;i<strlen(s1);i++)//将s1中的大写字母转换成小写字母并保存到s3中 { if(s1[i]>='A'&&s1[i]<='Z') { s3[j]=s1[i]+32; j++; } } if(strchr(s1,'+')!=NULL) //如果s1中有+则s2中的大写字母都不输出 { for(i=0;i<len;i++) { if(s2[i]>='A'&&s2[i]<='Z') { s2[i]=' ';// 有"+"则所有大写字母不输出 } } } for(i=0;i<strlen(s1);i++) //从s2中将s1中的坏键不输出 { while(strchr(s2,s1[i])) { s2[strchr(s2,s1[i])-s2]=' '; } } for(i=0;i<strlen(s3);i++)//在s2中将s3中的小写字母不输出 { while(strchr(s2,s3[i])) { s2[strchr(s2,s3[i])-s2]=' '; } } for(i=0;i<len;i++) { if(s2[i]!=' ')//把空格略过 { printf("%c",s2[i]); } } printf("\n"); return 0; } ```