舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 a-z(包括大、小寫)、數字 0-9、以及下劃線 _(代表空格)組成。題目保證 2 個字串均非空。
輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文本母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。
輸入樣例:
7_this_is_a_test
_hs_s_a_es
輸出樣例:
7ti給出應該輸入的一段文字、以及實際被輸入的文字,列出肯定壞掉的那些鍵,按照發現順序,在一行中輸出壞掉的鍵。其中英文本母只輸出大寫,每個壞鍵只輸出一次。
(1)有兩個問題需要解決:按順序輸出第乙個字串在第二個字串中沒有的字元,且英文本母均輸出大寫字母;確保輸出的字元沒有重複;
(2)定義乙個整型陣列hashtable,初值設定為0,先依次掃瞄第二個字串,將其中的小寫字母變成對應的大寫字母,並將大寫字母轉化為數字id,陣列hashtable以id為下標的值加1;然後依次掃瞄第乙個字串中的字元,並將小寫字母轉化為大寫字母,順便將其轉化為數字id,若hashtable[id]==0,則說明這個字母沒有在第二個字串**現,需要輸出,設定記錄陣列count用來存放目標字元,每當掃瞄到hashtable[id]==0時,就將對應的字元存放到count陣列中,同時將該字元對應的hashtable[id]加1(避免了同字元進入陣列count);
(3)依次輸出count中的字元。
#include
#include
inthashfunc
(char c)
else
if(c>=
'a'&&c<=
'z')
else
if(c>=
'0'&&c<=
'9')
else
if(c==
'_')
}return id;
}int
main()
;int len1=
strlen
(str1)
;int len2=
strlen
(str2)
;for
(int i=
0;i)int id=
hashfunc
(str2[i]);
hashtable[id]++;
}char count[85]
;int j=0;
for(
int i=
0;i)int id=
hashfunc
(str1[i]);
if(hashtable[id]==0
)}for(
int i=
0;i)return0;
}
1、將字元轉化為數字的過程可以直接用
int hashtable[
128]
;
替代。在c語言中,字元常量使用ascii碼統一編碼,標準ascii碼的範圍是0~127,其中包含了控制字元或通訊專用字元和常用的可顯示字元。0到9、a到z、a到z的ascii碼分別為48到57、65到90、97到122,小寫字母比大寫字母的ascii碼值大32。
2、涉及到字串比較時,通常可以考慮hash(雜湊)法。
3、提供幾個測試用例:
a_b_c_d
abcd//正確輸出:_
_df_
_df_//正確輸出:無輸出
1029 舊鍵盤 (20 分)
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。輸入在 2 行中分別給出應該輸入的文字 以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 a z 包括大 小寫 數字 0 9 以及下劃線 代表...
1029 舊鍵盤 (20 分)
1029 舊鍵盤 20 分 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。輸入格式 輸入在 2 行中分別給出應該輸入的文字 以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 a z 包括大...
1029 舊鍵盤 20 分
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。輸入在 2 行中分別給出應該輸入的文字 以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 a z 包括大 小寫 數字 0 9 以及下劃線 代表...