zoukankan      html  css  js  c++  java
  • PAT 乙级 1033 旧键盘打字(20)

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

    输入格式:

    输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。

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

    输出格式:

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

    输入样例:

    7+IE.
    7_This_is_a_test.
    

    输出样例:

    _hs_s_a_tst
    

    要点:

      1.题目中可能存在的字符中 “,”、“.”、“-”、“+”(代表上档键)ASC码是43 44 45 46,也就是ABCD减去32,所以在判断时要加上该字符要大于等于'A'

      2.题中明确指出第二行肯定不为空,也就是第一行可能为空(测试点2),所以读取时建议使用getline而不是cin

     1 #include<iostream>
     2 #include<string>
     3 #include<vector>
     4 #include<cctype>
     5 
     6 using namespace std;
     7 
     8 //判断是否为大写字母
     9 bool isUpperAlpha(char c)
    10 {
    11     if (c <= 'Z'&&'A' <= c)
    12         return true;
    13 
    14     return false;
    15 }
    16 
    17 //判断是否在坏的键里面
    18 bool isExist(const string& wrong, char c)
    19 {
    20     for (int i = 0; wrong[i] != ''; ++i)
    21     {
    22         if (wrong[i] >= 'A' && (wrong[i] == c || wrong[i] == c - 32)) //判断大于'A'的字符
    23             return true;
    24         else if (wrong[i] < 'A' && wrong[i] == c)    //判断 , . - + 123......
    25             return true;
    26 
    27     }
    28 
    29     return false;
    30 }
    31 
    32 int main()
    33 {
    34     bool flag = false;
    35     string wrong, input;
    36     vector<char> output;
    37 
    38     getline(cin, wrong);
    39     getline(cin, input);
    40 
    41     for (int i = 0; wrong[i] != ''; ++i)
    42     {
    43         if (wrong[i] == '+')
    44         {
    45             flag = true;
    46             break;
    47         }
    48     }
    49 
    50     for (int i = 0; input[i] != ''; ++i)
    51     {
    52         if (flag && !isUpperAlpha(input[i]) && !isExist(wrong, input[i]))//上档键坏了
    53                 output.push_back(input[i]);
    54         else if (!flag && !isExist(wrong, input[i]))//上档键未坏
    55                 output.push_back(input[i]);
    56     }
    57 
    58     vector<char>::iterator begin = output.begin(), end = output.end();
    59 
    60     for (; begin != end; ++begin)
    61         cout << *begin;
    62 
    63     cout << endl;
    64 
    65     return 0;
    66 }
  • 相关阅读:
    9.1 正则介绍_grep上 9.2 grep中 9.3 grep下
    汉诺塔递归问题
    8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下
    8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件
    8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向
    socket中使用序列化传结构体
    C# get,set属性用法
    Log4Net如何将日志按不同类型写入多个文件中
    app.config文件的configation标签中加代码引起”配置系统未能初始化“
    WinForm下使用 log4net
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/8366645.html
Copyright © 2011-2022 走看看