PAT A1084 Broken Keyboard(C++)

PAT甲级目录 | PAT乙级目录

题目描述

原题地址:A1084 Broken Keyboard
中文版:B1029 旧键盘

解题思路

统计每个键按下的次数,次数不相等则键损坏。

易错点

  • 输出的字母应当为大写
  • 空格输出为 ‘_’

也许陌生的知识点

  • #include <cctype>
    • 该头文件包含一系列处理单个字符的函数
    • 几个比较常用的函数:
      • isalnum()
        • 判断字符是否为字母或者数字
      • isalpha()
        • 判断字符是否为字母
      • isblank()
        • 判断字符是否为空格
      • isdigit()
        • 判断字符是否为数字
      • islower()
        • 判断字符是否为小写字母
      • isupper()
        • 判断字符是否为大写字母
      • y = tolower(x)
        • 将大写字母转换为小写字母
      • y = toupper(x)
        • 将小写字母转换为大写字母

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cctype>
#include <map>
#include <string>
using namespace std;
map<char, int> broken;
void count(string s, int tag){
while(s.length() != 0){
if(islower(s[0])) s[0] = toupper(s[0]);
if(tag == 0) broken[s[0]]++;
else broken[s[0]]--;
s.erase(s.begin());
}
}
int main(){
string s1, s2;
cin >> s1 >> s2;
count(s1, 0);
count(s2, 1);
for(int i = 0; i < s1.length(); i++){
if(islower(s1[i])) s1[i] = toupper(s1[i]);
if(broken[s1[i]] > 0){
cout << s1[i];
broken[s1[i]] = 0;
}
}
return 0;
}