1033 舊鍵盤打字——C/C++實現
阿新 • • 發佈:2018-12-01
題目
1033 舊鍵盤打字 (20 point(s))
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?
輸入格式:
輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過 105 個字元的串。可用的字元包括字母 [
a
-z
,A
-Z
]、數字0
-9
、以及下劃線_
(代表空格)、,
、.
、-
、+
(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。注意:如果上檔鍵壞掉了,那麼大寫的英文字母無法被打出。
輸出格式:
在一行中輸出能夠被打出的結果文字。如果沒有一個字元能被打出,則輸出空行。
輸入樣例:
7+IE. 7_This_is_a_test.
輸出樣例:
_hs_s_a_tst
演算法
先看程式碼2,這個比較容易理解。將壞鍵記錄下來,並在輸入時先判斷大寫有沒有壞,再分別進行判斷。如果上檔鍵壞了,所有大寫字母不輸出,所有被記錄的壞鍵也不輸出,其他都輸出;如果上檔鍵沒壞,只有記錄的壞鍵不輸出,其他都輸出。
程式碼1是程式碼的精簡凝練。
程式碼
1、C++
//PAT1033V1 #include <stdio.h> #include <ctype.h> int main() { char c; int bad[128] = {0}; /* record keys are broken or not */ while((c = getchar()) != '\n') /* read broken keys */ bad[toupper(c)] = 1; while((c = getchar()) != '\n') /* read string and print */ if(!bad[toupper(c)] && !(isupper(c) && bad['+'])) putchar(c); return 0; }
2、C++
#include <iostream> #include <cctype> using namespace std; int main(){ string s1,s2; char c; int b[128]={0}; while((c=getchar())!='\n') b[toupper(c)]=1; while((c=getchar())!='\n'){ if(b['+']==1){ //大寫字母壞了 if(isupper(c)); //c是大寫 else if(b[toupper(c)]==1); //c是小寫 else putchar(c); } else{ //大寫字母沒壞 if(b[toupper(c)]==1); //c是大寫 else putchar(c); } } return 0; }