码迷,mamicode.com
首页 > 其他好文 > 详细

PAT Basic 1029

时间:2018-08-10 23:24:37      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:item   写法   include   文字   map   数组   c++   for   count   

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

标签:item   写法   include   文字   map   数组   c++   for   count   

原文地址:https://www.cnblogs.com/yxp400/p/9457558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!