pat乙级1033. 旧键盘打字(20)

欢迎访问我的pat乙级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981369

题目描述

算法设计

由于ascii码中共有128个字符,可建立一个长度为128的数组broken表示相应位置的键是否已坏,初始化为false,表示键没有坏。遍历第一行字符将broken中坏掉的键对应的位置置true。遍历第二行字符如果不是大写字母且对应键没有坏,则进行输出;对于大写字母还需满足上档键没有坏的条件才能输出。

注意点

  1. 题目要求如果没有一个字符能被打出,则输出空行。但是测试点中并未检测这个条件,即使没有输出空行也能通过。
  2. 第一行可能是空行,所以最好用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;
}
发布了528 篇原创文章 · 获赞 1015 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/79513651