zoukankan      html  css  js  c++  java
  • 旧键盘

    链接: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 }
  • 相关阅读:
    Java基础05 构造函数
    Java基础04 类变量、成员变量、局部变量的解析
    Java基础03 八大基本类型以及类型之间的转换
    Java基础02 面向对象编程的三大特性详解
    软件工程作业02
    202009自我介绍
    2019春学期总结
    第十二周作业
    第十一周作业
    第十周作业
  • 原文地址:https://www.cnblogs.com/mtc-dyc/p/4625759.html
Copyright © 2011-2022 走看看