1029. 旧键盘

1029. 旧键盘(20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

输入格式:

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

输出格式:

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

输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI

思路:用哈希表表示键盘的键 (我其实是表示ASCII码所表示的所有字符,长度为256)


1.第二个字符串出现的字符,说明这个键是好的,用它的ACSII码值做为哈希表的下标,将它的值赋为1,表示这个键是好的。


2.再用第一个字符串中的字符作为下标依次检索哈希表 ,值为0说明这个键是坏的,将它存入记录坏键的数组。


3.需要特殊处理的是小写字母,当为小写字母的时候,转为大写字母记录(在ACSII码表中小写字母比对应的大写字母大32)


4.另一个需要处理的关键点在于去重,就是防止同一个坏键记录多次。这个可以在每次检索到一个坏键的时候,就把它在哈希表中的值改为1;


                对于大小写字母则要同时把对应的大写(或小写)字母在哈希表中的值也改为1,才能防止重复记录。

#include<stdio.h>
#include<string.h>
#define LEN 256
#define FALSE 0
#define TRUE 1

int main()
{
	int hash[LEN]={0};
	char str1[LEN],str2[LEN];
	char badkey[LEN];
	int i,bi=0;
	gets(str1);
	gets(str2);
	for(i=0;i<strlen(str2);++i){  //将好的键存入到hash表中 
		hash[str2[i]]=1;
	}
	for(i=0;i<strlen(str1);++i){   //依次检查输入,没有在hash表中的即是坏了的键 
		if(hash[str1[i]]!=1){
			if(str1[i]>='a'&&str1[i]<='z'){  //当为小写字母的时候,要转化为大写字母再存入坏键数组中 
				badkey[bi++]=str1[i]-('a'-'A');  //将小写字母转化为大写字母 
				hash[str1[i]-('a'-'A')]=1;  //防止重记这个小写字母对应的大写字母,将它记录到hash表中 
			}else{
				badkey[bi++]=str1[i];
			}
			hash[str1[i]]=1;  //防止重记这个字符 
			if(str1[i]>='A'&&str1[i]<='Z')
			{
				hash[str1[i]+('a'-'A')]=1;   //防止重记这个大写字母对应的小写字母 
			}
		}
	}
	for(i=0;i<bi;++i){
		printf("%c",badkey[i]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36652138/article/details/80033245