旧键盘
链接:http://www.nowcoder.com/pat/6/problem/4055
题目描述
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出
肯定坏掉的那些键。
输入描述:
输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、
以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。
输出描述:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。
输入例子:
7_This_is_a_test
_hs_s_a_es
输出例子:
7TI
思路:题意还是比较简单,但是实现有点麻烦。1.重复的错误只输出第一次出现的情况就行,比如有两个I的地方都错了,只在第一个的位置处输出就行了。
2.需要按顺序输出,就是从头到尾找坏键的顺序。我写的比较麻烦,再看看有没有更简单的方法。
1 #include "iostream" 2 #include <iomanip> 3 #include <string.h> 4 #include <string> 5 #include <vector> 6 #include <cmath> 7 #include <cctype> 8 #include <algorithm> 9 using namespace std; 10 11 int main() 12 { 13 int mark[80]; 14 int value[80]; 15 int flag[80]; 16 memset(flag, 0, sizeof(flag)); 17 memset(mark, 0, sizeof(mark)); 18 memset(value, 0, sizeof(value)); 19 string str1, str2; 20 cin >>str1 >>str2; 21 int i=0, j=0, k=0; 22 for(; i<str1.length()&&j<str2.length(); ++i) 23 { 24 if(str1[i] == str2[j]) 25 { 26 ++j; 27 } 28 else 29 { 30 if(isupper(str1[i])) 31 { 32 //mark[int(str1[i]-'A')+10] = 1; 33 mark[k] = 1; 34 value[k++] = int(str1[i]-'A'+10); 35 } 36 else 37 { 38 if(islower(str1[i])) 39 { 40 //mark[int(str1[i]-32-'A')+10] = 1; 41 mark[k] = 1; 42 value[k++] = int(str1[i]-32-'A'+10); 43 } 44 else 45 { 46 if(isdigit(str1[i])) 47 { 48 //mark[int(str1[i]-'0')] = 1; 49 mark[k] = 2; 50 value[k++] = int(str1[i]-'0'); 51 } 52 else 53 { 54 mark[k] = 3; 55 value[k++] = -1; 56 } 57 } 58 } 59 } 60 } 61 for(; i<str1.length(); ++i) 62 { 63 if(isupper(str1[i])) 64 { 65 //mark[int(str1[i]-'A')+10] = 1; 66 mark[k] = 1; 67 value[k++] = int(str1[i]-'A'+10); 68 } 69 else 70 { 71 if(islower(str1[i])) 72 { 73 //mark[int(str1[i]-32-'A')+10] = 1; 74 mark[k] = 1; 75 value[k++] = int(str1[i]-32-'A'+10); 76 } 77 else 78 { 79 if(isdigit(str1[i])) 80 { 81 //mark[int(str1[i]-'0')] = 1; 82 mark[k] = 2; 83 value[k++] = int(str1[i]-'0'); 84 } 85 else 86 { 87 //mark[36] = 1; 88 mark[k] = 3; 89 value[k++] = -1; 90 } 91 } 92 } 93 } 94 for(int i=0; i<k; ++i) 95 { 96 if(flag[value[i]] == 1) continue; 97 if(mark[i] == 1) 98 { 99 cout <<char(value[i]+'A'-10); 100 flag[value[i]] = 1; 101 } 102 else 103 { 104 if(mark[i] == 2) 105 { 106 cout <<value[i]; 107 flag[value[i]] = 1; 108 } 109 else 110 { 111 cout <<'_'; 112 flag[36] = 1; 113 } 114 } 115 } 116 cout <<endl; 117 return 0; 118 }