PAT乙級 1029 舊鍵盤 (20分) 程式碼+分析
阿新 • • 發佈:2020-12-15
1029 舊鍵盤 (20分)
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 A-Z(包括大、小寫)、數字 0-9、以及下劃線 _(代表空格)組成。題目保證 2 個字串均非空。
輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文字母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。
輸入樣例:
7_This_is_a_test
_hs_s_a_es
輸出樣例:
7TI
分析:
我用雜湊來寫此題。列舉s1,與s2比較,如果遍歷完s2所有字元都沒找到與s1相同,且HashTable為假,則輸出s1的大寫格式,並將對應的HashTable置為true。
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int main() {
bool HashTable[128]={false};
char s1[100],s2[100];
gets(s1);
gets(s2);
int len1=strlen(s1);
int len2=strlen(s2);
for(int i=0,j;i<len1;i++)
{
if(s1[i]>='a'&&s1[i]<='z') s1[i]-=32;
for(j=0;j<len2;j++)
{
char c2;//不能直接對s2[j]操作,下一次列舉會有錯誤。
c2=s2[j];
if(c2>='a'&&c2<='z') c2-=32;
if(s1[i]== c2) break;
}
if(j==len2&&HashTable[s1[i]]==false)//j=len2說明s2[j]所有的值都與s1[i]不一樣。
{
printf("%c",s1[i]);
HashTable[s1[i]]=true;
}
}
}
如有疑問,可以留言評論區哦~