1033 旧键盘打字

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

输入格式:

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

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

输出格式:

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

输入样例:

复制代码
7+IE.
7_This_is_a_test.

输出样例:

_hs_s_a_tst

cpp 复制代码
/*
这里还是跟旧键盘一样的思路;用字符串一的字符去匹配字符串2内的字符,如果找到相同的
则在字符串2中将字符赋值为不是给定值内的其他字符,在输出时遇到该种字符就不输出;
注意这里'+'是上档键,用它遍历时去找大写字符;

这里注意串长度最大10的5次方,双重循环会可能超时;
但是字符串一长度最大为26+10+1+4==41;这里坏键只用大写字母表示;

注意这里是第二行非空,不是两行非空,读题要仔细啊;
*/
#include<iostream>
#include<string>
#define null '#'
using namespace std;
int main(){
    //输入两字符串;
    string s1,s2;
    cin>>s1>>s2;
    if(s2==""){    //这里注意cin读入string是从第一个非空格非换行字符开始的;
        //然而这里题目说的是第二行非空,不保证一定有坏键;
        s2=s1;
        s1="";
    }
    //遍历;
    for(int i=0;i<(int)s1.length();i++){    //从s1中逐个取出字符;
        for(int j=0;j<(int)s2.length();j++){    //字符与s2中字符逐个比较;
            if(s1[i]>='0'&&s1[i]<='9'){    //s1字符为数字;
                if(s1[i]==s2[j]){
                    s2[j]=null;    //赋值为空;
                }
            }
            if(s1[i]>='A'&&s1[i]<='Z'){    //s1字符为字母;
                if(s1[i]==s2[j]||s1[i]==s2[j]-32){    //大小写都可能;
                    s2[j]=null;
                }
            }
            if(s1[i]=='+'){    //上档键坏1;
                if(s2[j]>='A'&&s2[j]<='Z'){
                    s2[j]=null;
                }
            }
            if(s1[i]==s2[j]){    //其他字符;
                s2[j]=null;
            }
        }
    }
    //查看有没有能输出的字符;
    int flag=0;
    for(int i=0;i<(int)s2.length();i++){
        if(s2[i]!=null){
            flag=1;
        }
    }
    //输出;
    if(flag==0){
        //无字符,输出空行;
    }
    else if(flag==1){
        for(int i=0;i<(int)s2.length();i++){
            if(s2[i]!=null){
                cout<<s2[i];
            }
        }
    }
    cout<<endl;
    return 0;
}
/*
反思:读题要仔细,不要自以为是;还有这里string在cin时不会读入空字符串;
所以有一行为空时会自动读入下一行;
*/
相关推荐
HPtiger5 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
努力努力再努力wz7 小时前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
慧都产品智能化8 小时前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
ShineWinsu8 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu9 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
坤坤子吖10 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
lisw0510 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
一起学安全技术11 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
沫璃染墨11 小时前
从零入门计算机网络系列(十八):TCP连接管理详解——从三次握手与四次挥手到TIME_WAIT机制
运维·服务器·网络·c++·网络协议·tcp/ip·tcp
Delightrs12 小时前
Rust LeetCode238 算法题解
开发语言·算法·rust