PAT 舊鍵盤打字 附測試點2 5 C 25行

2021-10-05 13:28:41 字數 1608 閱讀 1064

跟 舊鍵盤.那題類似,也是用計數法,用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...