跟 舊鍵盤.那題類似,也是用計數法,用asc陣列儲存壞掉的鍵,再用應輸出字串去掃瞄。
測試點2:可能沒有壞鍵,即輸入的是空字串,所以不能用cin或scanf("%s"),c語言就用fgets(),c++就用cin.getline或者getline;
測試點5:提前計算好strlen可以省時間,避免超時。
#include
#include
using
namespace std;
intmain()
;int flag=1;
char bad[
100010
],words[
100010];
cin.
getline
(bad,
100010);
cin.
getline
(words,
100010);
int badlen=
strlen
(bad)
,wordslen=
strlen
(words)
;//提前算好長度 避免超時
補充:fgets()用法
來自:雖然用 gets() 時有空格也可以直接輸入,但是 gets() 有乙個非常大的缺陷,即它不檢查預留儲存區是否能夠容納實際輸入的資料,換句話說,如果輸入的字元數目大於陣列的長度,gets 無法檢測到這個問題,就會發生記憶體越界,所以程式設計時建議使用 fgets()。
fgets() 的原型為:
# include
char
*fgets
(char
*s,int size, file *stream)
;
注意:fgets(s, sizeof(s), stdin) 讀入的字元要比 看上去的長度多1.
原因是因為它把回車符號\n也讀進去了
fgets() 雖然比 gets() 安全,但安全是要付出代價的,代價就是它的使用比 gets() 要麻煩一點,有三個引數。它的功能是從 stream 流中讀取 size 個字元儲存到字元指標變數 s 所指向的記憶體空間。它的返回值是乙個指標,指向字串中第乙個字元的位址。
其中:s 代表要儲存到的記憶體空間的首位址,可以是字元陣列名,也可以是指向字元陣列的字元指標變數名。size 代表的是讀取字串的長度。stream 表示從何種流中讀取,可以是標準輸入流 stdin,也可以是檔案流,即從某個檔案中讀取,這個在後面講檔案的時候再詳細介紹。標準輸入流就是前面講的輸入緩衝區。所以如果是從鍵盤讀取資料的話就是從輸入緩衝區中讀取資料,即從標準輸入流 stdin 中讀取資料,所以第三個引數為 stdin。
# include
intmain()
pat 乙級 1033 舊鍵盤打字 C
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入在 2 行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過 10 5個字元的串。可用的字元包括字母 a z,a z...
1033 舊鍵盤打字(PAT 乙級 C 實現)
1033 舊鍵盤打字 20 20 point s 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在2行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過...
PAT 乙級 1033 舊鍵盤打字 (C語言)
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在 2 行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過10 5個字元的串。可用的字元包括字母 a z...