1. 程式人生 > 其它 >PAT乙級 1029 舊鍵盤 (20分) 程式碼+分析

PAT乙級 1029 舊鍵盤 (20分) 程式碼+分析

技術標籤:PATc++

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; } } }

如有疑問,可以留言評論區哦~