标签:item 写法 include 文字 map 数组 c++ for count
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在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 }
标签:item 写法 include 文字 map 数组 c++ for count
原文地址:https://www.cnblogs.com/yxp400/p/9457558.html