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

    1033 旧键盘打字 (20 分)

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

    输入格式:

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

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

    输出格式:

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

    输入样例:

    7+IE.
    7_This_is_a_test.
    

    输出样例:

    _hs_s_a_tst
    注意:
      有一个测试样例第一行是空,这样直接输出即可,使用getline()函数读入可能会更好。
    code1:初版
    #include<iostream>
    #include<string>
    #include<vector>
    #include<string>
    #include<cstdio>
    #include<cmath>
    #include<string.h>
    #include<algorithm>
    #include<unordered_map>
    #include<stack>
    #include<map>
    #include<regex>
    using namespace std;
    
    
    int main()
    {
        string str1="",str2;
        if(cin.peek()=='
    ')
        {
            cin>>str2;
            cout<<str2;
            return 0;
        }
        cin>>str1>>str2;
        
        map<char ,int>mp;
    
        for(int i=0;i<str1.size();i++)
            mp[str1[i]]++;
        for(int i=0;i<str2.size();i++)
        {
            if(!isalnum(str2[i])&&str2[i]!='_'&&str2[i]!=','&&str2[i]!='.'&&str2[i]!='-')
                continue;
            if(isalpha(str2[i]))
            {
                if(isupper(str2[i]))
                {
                    if(mp['+']==0&&mp[str2[i]]==0)
                    {
    
                        printf("%c",str2[i]);
                    }
                }
                else if(mp[toupper(str2[i])]==0)
                {
    
                    printf("%c",str2[i]);
                }
    
            }
            else if(mp[str2[i]]==0&&str2[i]!='+')
            {
    
                printf("%c",str2[i]);
            }
    
        }
    
        return 0;
    }

    code2 改良版

    #include<iostream>
    #include<string>
    #include<vector>
    #include<string>
    #include<cstdio>
    #include<cmath>
    #include<string.h>
    #include<algorithm>
    #include<unordered_map>
    #include<stack>
    #include<map>
    #include<regex>
    using namespace std;
    
    
    int main()
    {
        string str1,str2;
        getline(cin,str1);
        getline(cin,str2);
        map<char ,int>mp;
        for(int i=0;i<str1.size();i++)
            mp[str1[i]]++;
        for(int i=0;i<str2.size();i++)
        {
            if(mp[toupper(str2[i])]==1) continue;
            if(isupper(str2[i])&&mp['+']==1) continue;
            cout<<str2[i];
        }
        return 0;
    }
     
  • 相关阅读:
    《Java基础学习笔记》JAVA修饰符之私有化(Private)
    《Java基础学习笔记》JAVA之静态代码块
    《Java基础学习笔记》JAVA之构造函数和构造代码块
    《Java基础学习笔记》JAVA面向对象
    在C#.NET中,如何生成PDF文件?主要有以下几个途径:(转)
    ckeditor与ckfinder的使用方法 .NET (转载)
    ckeditor3.3.1编辑区自动换行(转)
    iTextSharp 使用详解(转)
    .net DataGrid绑定列手动添加数据
    操作必须使用一个可更新的查询
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10407181.html
Copyright © 2011-2022 走看看