1029. 旧键盘(20)

来源:互联网 发布:高三睡不好 知乎 编辑:程序博客网 时间:2024/05/18 01:09

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

输入格式:

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

输出格式:

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

输入样例:
7_This_is_a_test_hs_s_a_es
输出样例:
7TI

提交代码


这题一开始的时候我就单算定义一个数组,下标就是acii码。然后把s1字符串中每个字符对应数组下标 变为1,s2扫描的时候再变为0,最后输出是1的就ok

结果有问题。再看看题目,输出不是那大小顺序输出的,没办法,换个套路。先扫描s2,变为1.再扫描s1,并且进行判断是要打印(对应数组位置是不是0),再把对应的数组位置变为1(不然会重复输出)。不啰嗦了,代码如下:


#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
int i,arr[123]={0};
string s1,s2;
cin>>s1>>s2;
for(i=0;i<s2.length();i++)
{
if(islower(s2[i]))
s2[i]=toupper(s2[i]);
arr[s2[i]]=1;
}
for(i=0;i<s1.length();i++)
{

if(islower(s1[i]))
s1[i]=toupper(s1[i]);
if(arr[s1[i]]==0)
{
printf("%c",s1[i]);
arr[s1[i]]=1;
}
}
return 0;
 }