舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?
輸入格式:
輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出;每段文字是不超過 105 個字元的串。可用的字元包括字母 [a-z, a-z]、數字 0-9、以及下劃線 _(代表空格)、,、.、-、+(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。
注意:如果上檔鍵壞掉了,那麼大寫的英文本母無法被打出。
輸出格式:
在一行中輸出能夠被打出的結果文字。如果沒有乙個字元能被打出,則輸出空行。
輸入樣例:
7+ie.
7_this_is_a_test.
輸出樣例:
_hs_s_a_tst
(讓我頭疼的一條題目)
第一次提交:得1分,只有測試點2對;
第二次提交:得19分,只有測試點2不對,多次修改,依舊不對(演算法筆記上的**也不對)。
經搜尋,測試點2不過的原因是:輸入的字串可能為空,不適合使用scanf()進行輸入,這裡使用cin.getline(str,maxn);
或getline(cin,str);
。
(1)壞鍵中的英文本母用大寫
(2)第二行字母非空不代表第一行字母不非空
(3)大寫字母的輸出需要保證上檔鍵和小寫字母鍵都完好
設定乙個hashtable陣列,初值全為true;
(1)第一行輸入的字元為壞鍵,由於大寫需要通過上檔鍵加小寫字母才能輸出,所以先將壞鍵中的大寫字母變為小寫字母,對應的hash陣列值改為false,記錄為壞鍵;
(2)依次掃瞄第二行字串,對於第i個字元,如果是大寫字母,要確定其對應的小寫字母的hash值和上檔鍵的hash值是否全都為true,若全都為true,則可以輸出,剩下的符號只要其對應的hash值為true即可輸出。
**如下:
#include
#include
using
namespace std;
intmain()
hash[str[i]]=
false;}
getline
(cin,str)
;for
(int i =
0; i < str.
size()
; i++)}
else
if(hash[str[i]])
}return0;
}
1、定義雜湊陣列時,如果寫成bool hash[128];
一定要放在main函式裡面,否則會出現編譯錯誤;如果寫成bool hashtable[128];
則可以放在main函式外面,建議一直使用hashtable
。
2、getline
的使用條件:輸入的字串型別為string型、標頭檔案要加#include
。
1033 舊鍵盤打字(20 分)
1033 舊鍵盤打字 20 分 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在 2 行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過 10 5 個...
1033 舊鍵盤打字 (20 分)
1033 舊鍵盤打字 20 分 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在 2 行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過 10 5 1...
1033 舊鍵盤打字 20 分
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入在 2 行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過 10 5 個字元的串。可用的字元包括字母 a z,a ...