【PAT乙级】1033 旧键盘打字 (20分)

    科技2022-07-12  138

    题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

    输入格式: 输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 10^​5​​ 个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。

    注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

    输出格式: 在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

    输入样例:

    7+IE. 7_This_is_a_test.

    输出样例:

    _hs_s_a_tst

    两个代码的唯一区别为两个字符串的输入方式因为题目中并没有保证第一行输入非空,只是说第二行非空.所以使用cin不太好 这个题跟1029题几乎一模一样,只是倒过来而已

    链接https://blog.csdn.net/weixin_46014378/article/details/108913957

    cin >> s1 >> s2; getline(cin, s1); getline(cin, s2);

    19分代码

    #include <iostream> #include <cctype> using namespace std; int main(){ string s1, s2; cin >> s1 >> s2; for(int i=0; i<s2.length(); i++){ if(s1.find('+')== string::npos){ if(s1.find(toupper(s2[i])) == string::npos) cout << s2[i]; }else{ if((s2[i]<'A'||s2[i]>'Z') && s1.find(toupper(s2[i])) == string::npos) cout << s2[i]; } } cout << endl; }

    满分代码

    #include <iostream> #include <cctype> using namespace std; int main(){ string s1, s2; getline(cin, s1); getline(cin, s2); for(int i=0; i<s2.length(); i++){ if(s1.find('+')== string::npos){ if(s1.find(toupper(s2[i])) == string::npos) cout << s2[i]; }else{ if((s2[i]<'A'||s2[i]>'Z') && s1.find(toupper(s2[i])) == string::npos) cout << s2[i]; } } cout << endl; }

    优化代码

    #include <iostream> #include <cctype> using namespace std; int main(){ string s1, s2; getline(cin, s1); getline(cin, s2); for(int i=0; i<s2.length(); i++){ if(s1.find(toupper(s2[i])) != string::npos) continue; if(s1.find('+')!=string::npos && isupper(s2[i])) continue; cout << s2[i]; } return 0; }
    Processed: 0.010, SQL: 8