1029 旧键盘

这篇文章介绍了一种方法,通过比较两个输入的字符串,找出由于键盘损坏导致缺失的字符,利用ASCII码转换和匹配来确定哪些键是坏的,最后输出这些坏键。
摘要由CSDN通过智能技术生成

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

输入样例:

7_This_is_a_test
_hs_s_a_es

输出样例:

7TI

/*
这里输入两个字符串,字符串1为原串;字符串2为漏掉字符后的串,漏掉的最多字符个数
为字符串一的长度减去字符串2的长度;字符串1里每个字符跟字符串2里面匹配,若是遍历
字符串2都没有找到,说明该字符,被漏掉了,是坏键,那么有可能坏键在字符串1里出现了多次
我们只能输出一次,所以我们需要建立一个坏键表;选用一个数组存放,把漏掉的字符在这个数组里找,若是找到表示
已经出现过,就不用保存,遍历结束后输出数组内元素即可;而且两个字符串非空,不用考虑
全坏键的情况;

这里注意大小写是同一个键;可以选择将两个字符串里的小写全部转换为大写来进行操作;
注意A-Z的ASII码为65-90
a-z的ASII码为97-122;
a变为z 码减去(97-65)32;
*/
#include<iostream>
#include<string>
#define Max 80
using namespace std;
int main(){
    string s1,s2;
    cin>>s1>>s2;
    char Wrong[Max];
    //初始化;将数组中字符设置为不会出现在字符串中的字符;比如#*;
    for(int i=0;i<Max;i++){
        Wrong[i]='*';
    }
    //将小写转为大写;
    //串1:
    for(int i=0;i<s1.length();i++){
        if(s1[i]>='a'&&s1[i]<='z'){
            s1[i]-=32;
        }
    }
    //串2:
    for(int i=0;i<s2.length();i++){
        if(s2[i]>='a'&&s2[i]<='z'){
            s2[i]-=32;
        }
    }
    //遍历;
    int find=0;    //找到了为1,表示为不是坏键,没找到为0,是坏键;
    int count=0;    //当前坏键个数;
    int k=0;    //坏键表索引下标;
    for(int i=0;i<s1.length();i++){    //s1的每个字符拿出来匹配;
        find=0;    //设置为没找到,是坏;每次重置;
        for(int j=0;j<s2.length();j++){    //s1字符在s2中查找;
            if(s1[i]==s2[j]){
                find=1;
            }
        }
        /*遍历结束;如果find为1,则表示不是坏键,不进行操作,为0则是坏键
        若是坏键在坏键表内查找,若找到也不操作,未找到则存入坏键表中;
        */
        //下面只进行坏键的操作;
        if(find==0){    //未找到则是坏键;
            //查找坏键表;
            for(k=0;k<count;k++){
                if(Wrong[k]==s1[i]){
                    break;    //坏键表中找到直接退出;
                }
            }
            if(k==count){    //遍历坏键表结束都没找到时,k的值为count;
                Wrong[k]=s1[i];
                count++;    //坏键个数增加;
            }
        }
    }
    //输出;
    for(int i=0;i<count;i++){
        cout<<Wrong[i];
    }
    cout<<endl;    //换行;与输出格式一直;
    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值