1029 舊鍵盤 20分

2021-10-03 19:49:36 字數 1880 閱讀 9509

舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。

輸入格式:

輸入在 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 以及下劃線 代表...