旧键盘打字

链接:http://www.nowcoder.com/pat/6/problem/4059

题目描述

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文

字会是怎样?

 

输入描述:

输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的

字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。



注意:如果上档键坏掉了,那么大写的英文字母无法被打出。



输出描述:

在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

 

输入例子:

7+IE.

7_This_is_a_test.

 

输出例子:

_hs_s_a_tst

思路:给可以存在的每个字符一个变量,用来保存该字符的键是好是坏。然后再对着检查就行了。但是代码不简洁。
  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 const int MAXN = 100005;
 12 int num[MAXN];
 13 
 14 bool cmp(int a, int b)
 15 {
 16     return a<b;
 17 }
 18 
 19 int mark[41];
 20 
 21 int main()
 22 {
 23     string strErr, strSor, strDes;
 24     cin >>strErr >>strSor;
 25     for(int i=0; i<strErr.length(); ++i)
 26     {
 27         if(isdigit(strErr[i]))    mark[strErr[i]-'0'] = 1;
 28         else
 29         {
 30             if(isupper(strErr[i]))    mark[strErr[i]-'A'+10] = 1;
 31             else
 32             {
 33                 if(islower(strErr[i]))    mark[strErr[i]-32-'A'+10] = 1;
 34                 else
 35                 {
 36                     if(strErr[i] == '_')    mark[36] = 1;
 37                     else
 38                     {
 39                         if(strErr[i] == ',')    mark[37] = 1;
 40                         else
 41                         {
 42                             if(strErr[i] == '.')    mark[38] = 1;
 43                             else
 44                             {
 45                                 if(strErr[i] == '-')    mark[39] = 1;
 46                                 else    mark[40] = 1;
 47                             }
 48                         }
 49                     }
 50                 }
 51             }
 52         }
 53     }
 54     for(int i=0; i<strSor.length(); ++i)
 55     {
 56         if(isdigit(strSor[i]))
 57         {
 58             if(mark[strSor[i]-'0'] == 1)    continue;
 59         }
 60         else
 61         {
 62             if(isupper(strSor[i]))
 63             {
 64                 if(mark[strSor[i]-'A'+10]==1 ||
 65                    mark[40] == 1)    continue;
 66             }
 67             else
 68             {
 69                 if(islower(strSor[i]))
 70                 {
 71                     if(mark[strSor[i]-32-'A'+10] == 1)    continue;
 72                 }
 73                 else
 74                 {
 75                     if(strSor[i] == '_')
 76                     {
 77                         if(mark[36] == 1)    continue;
 78                     }
 79                     else
 80                     {
 81                         if(strSor[i] == ',')
 82                         {
 83                             if(mark[37] == 1)    continue;
 84                         }
 85                         else
 86                         {
 87                             if(strSor[i] == '.')
 88                             {
 89                                 if(mark[38] == 1)    continue;
 90                             }
 91                             else
 92                             {
 93                                 if(strSor[i] == '-')
 94                                 {
 95                                     if(mark[39] == 1)    continue;
 96                                 }
 97                                 else
 98                                 {
 99                                     if(mark[40] == 1)    continue;
100                                 }
101                             }
102                         }
103                     }
104                 }
105             }
106         }
107         strDes += strSor[i];
108     }
109     cout <<strDes <<endl;
110     return 0;
111 }

 

posted @ 2015-07-07 11:41  皮蛋儿丶  阅读(193)  评论(0编辑  收藏  举报