PAT 乙级 1033.旧键盘打字 C++/Java

题目来源

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

输入格式:

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

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

输出格式:

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

输入样例:

7+IE.
7_This_is_a_test.

输出样例:

_hs_s_a_tst

思路:

输入字符串时要使用getline(cin, str); 否则当输入的坏键字符串为空时,会出错。首先把坏键的小写也添加进字符串中,对是否存在上档键’+‘进行标记;使用unoredered_map将坏键标记,判断完整字符串中是否存在坏键,且若存在上档键则不输出大写字母,否则输出完整字符串中的每个字符。

 

C++实现:

 1 #include <iostream>
 2 #include <unordered_map>
 3 #include <string>
 4 using namespace std;
 5 
 6 int main() {
 7     string badStr;
 8     string wholeStr;
 9     getline(cin, badStr);
10     getline(cin, wholeStr);
11     bool flag = false;
12     for (int i = 0; i < badStr.length(); i++) {
13         if (badStr[i] >= 'A' && badStr[i] <= 'Z') {
14             badStr += badStr[i] + 32;
15         }
16         if (badStr[i] == '+') {
17             flag = true;
18         }
19     }
20     unordered_map<char, int> map;
21     for (int i = 0; i < badStr.length(); i++) {
22         if (map.find(badStr[i]) == map.end()) {
23             map[badStr[i]] = 1;
24         }
25     }
26     for (int i = 0; i < wholeStr.length(); i++) {
27         if (map.find(wholeStr[i]) == map.end()) {
28             if (flag && wholeStr[i] >= 'A' && wholeStr[i] <= 'Z') {
29                 continue;
30             }
31             else {
32                 cout << wholeStr[i];
33             }
34         }
35     }
36     return 0;
37 }

 

 

 

 

Java实现:

 

posted @ 2021-04-06 08:51  47的菠萝~  阅读(59)  评论(0编辑  收藏  举报