PAT_B_1033 舊鍵盤打字 (20 分)【測試點2】
阿新 • • 發佈:2019-01-11
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?
輸入格式:
輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過 105 個字元的串。可用的字元包括字母 [a
-z
, A
-Z
]、數字 0
-9
、以及下劃線 _
(代表空格)、,
、.
、-
、+
(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。
注意:如果上檔鍵壞掉了,那麼大寫的英文字母無法被打出。
輸出格式:
在一行中輸出能夠被打出的結果文字。如果沒有一個字元能被打出,則輸出空行。
輸入樣例:
7+IE.
7_This_is_a_test.
輸出樣例:
_hs_s_a_tst
本題易出問題點:
1.如果上檔鍵‘+’壞了 那麼大寫字母將無法輸出
2.壞掉的字母鍵 全部以大寫字母輸出
3.【測試點2出錯處】壞掉的字母鍵不一定有內容!
#include <iostream> #include <string.h> using namespace std; int main() { int letter[26] = { 0 }; int number[10] = { 0 }; int douhao = 1, juhao = 1, kongge = 1, sub = 1, sum = 1; char bad[41]; cin.getline(bad,41);//測試點2出錯處,可以輸入空 //cin >> bad; //這樣無法輸入空字串,所以出錯 int index; int len = strlen(bad); for (int i = 0; i<len; i++) { if (bad[i] <= 'Z'&&bad[i] >= 'A') { index = bad[i] - 'A'; letter[index] = 1; continue; } if (bad[i] <= '9'&&bad[i] >= '0') { index = bad[i] - '0'; number[index] = 1; continue; } if (bad[i] == ',') { douhao = 0; continue; } if (bad[i] == '.') { juhao = 0; continue; } if (bad[i] == '-') { sub = 0; continue; } if (bad[i] == '+') { sum = 0; continue; } if (bad[i] == '_') { kongge = 0; continue; } } char original[110000]; cin >> original; int length = strlen(original); for (int i = 0; i<length; i++) { if (original[i] <= 'z'&&original[i] >= 'a') { index = original[i] - 'a'; if (!letter[index])cout << original[i]; continue; } if (original[i] <= 'Z'&&original[i] >= 'A') { index = original[i] - 'A'; if (!letter[index]&&sum)cout << original[i]; continue; } if (original[i] <= '9'&&original[i] >= '0') { index = original[i] - '0'; if (!number[index])cout << original[i]; continue; } if (original[i] == ',') { if (douhao)cout << ","; continue; } if (original[i] == '.') { if (juhao)cout << "."; continue; } if (original[i] == '-') { if (sub)cout << "-"; continue; } if (original[i] == '+') { if (sum)cout << "+"; continue; } if (original[i] == '_') { if (kongge)cout << "_"; continue; } } return 0; }