题目
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:
输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:
7+IE.
7_This_is_a_test.
输出样例:
_hs_s_a_tst
分析
- s1设为坏键,s2设为应该输入的字符串。result设为第一次结果串,result2设为最终结果串。
- 先去掉s2中坏的键,就是用s2[i]的大写形式遍历s1。如果找不到,就记录在result里。
- 如果s1里不包含’+’,result2=result;否则,遍历result,将ASCII码在’A’-'Z’之外的存入result2。
- 题目有一句话,保证字符串2非空,没说字符串1,所以字符串1应该用getline读取。
AC代码
#include<iostream>
#include<cctype>
#include<string>
using namespace std;
int main()
{string s1,s2,result="",result2="";getline(cin,s1);cin>>s2;int i;for(i=0; i<s2.length(); i++){if(s1.find(toupper(s2[i]))==string::npos){result+=s2[i];}}if(s1.find('+')!=string::npos){for(i=0; i<result.length(); i++){if(result[i]<'A'||result[i]>'Z'){result2+=result[i];}}}elseresult2=result;cout<<result2;return 0;
}
更多题解
pat 乙级(Basic Level) 题解汇总(持续更新)(C++)