欢迎访问我的pat乙级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981369
题目描述
算法设计
由于ascii码中共有128个字符,可建立一个长度为128的数组broken表示相应位置的键是否已坏,初始化为false,表示键没有坏。遍历第一行字符将broken中坏掉的键对应的位置置true。遍历第二行字符如果不是大写字母且对应键没有坏,则进行输出;对于大写字母还需满足上档键没有坏的条件才能输出。
注意点
- 题目要求如果没有一个字符能被打出,则输出空行。但是测试点中并未检测这个条件,即使没有输出空行也能通过。
- 第一行可能是空行,所以最好用getline函数输入,而不要用cin或者scanf
C++代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2;
getline(cin,s1);
getline(cin,s2);
bool broken[128]={false};//true表示该键坏了,false表示该键完好
for(char c:s1)
broken[c]=true;//在数组broken中把坏掉的键置true
for(char c:s2)
if(!broken[toupper(c)]&&(!isupper(c)||!broken['+']))//如果对应的键没有坏且不是大写字母或上档键没有坏则输出
printf("%c",c);
printf("\n");//如果没有一个字符能被打出,则输出空行。(测试点并未检测)
return 0;
}