PAT Basic 1029

Posted yxp400

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT Basic 1029相关的知识,希望对你有一定的参考价值。

1029 旧键盘

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。

输入样例:

7_This_is_a_test
_hs_s_a_es

输出样例:

7TI
  题解:这道题并不是很难,标记坏键是否输出过既可以用set,map,也可以自己用一个bool类型的数组来表示(这样写可能略微麻烦了,但是因为是用数组,可以直接存取,按理说效率要高一些,当然,需要空间也较大,其实是一种哈希的写法了,在后面那道旧键盘打字的题目中,我会详细用代码写出来)。
  同时遍历两个字符串,如果发现不相同的字符,即为坏键,判断该坏键是否输出后,再进行操作即可。
 
  知识点复习:c++中可以使用toupper(小转大)和tolower(大转小)自动进行大小写转化,非字母自动略过,OJ题目里面还是非常方便的。

代码如下:
 1 #include<iostream>
 2 #include<string>
 3 #include<set>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     string a, b;
10     int i, j;
11     set<char> c;
12     cin>>a>>b;
13     for( i = 0, j = 0; i < a.length() && j < b.length(); i++){
14         if( a[i] == b[j])
15             j++;
16         else{
17             if( c.count(toupper(a[i])) != 1 ){
18                 printf("%c",toupper(a[i]));
19                 c.insert(toupper(a[i]));
20             }
21         }
22     }    
23     while( i < a.length()){
24         if( c.count(toupper(a[i])) != 1){
25             printf("%c",toupper(a[i]));
26             c.insert(toupper(a[i]));
27         }
28         i++;
29     }
30     return 0;
31 }

 

 






以上是关于PAT Basic 1029的主要内容,如果未能解决你的问题,请参考以下文章

PAT Basic 1078

[PAT乙级]1029 旧键盘(代码不是很好?有时间想想其他写法!)

PAT 甲级 1029 Median

PAT 1029. Median

PAT 1029. 旧键盘

PAT甲级——A1029 Median