舊鍵盤上壞了幾個鍵,因而在敲一段文字的時候,對應的字符就不會出現。如今給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣? 輸入格式: 輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過 10^5個字符的串。 可用的字符包括字母 [a-z, A-Z]、數字 0-九、以及下劃線 _(表明空格)、,、.、-、+(表明上檔鍵)。題目保證第 2 行輸入的文字串非空。 注意:若是上檔鍵壞掉了,那麼大寫的英文字母沒法被打出。 輸出格式: 在一行中輸出可以被打出的結果文字。若是沒有一個字符能被打出,則輸出空行。 輸入樣例: 7+IE. 7_This_is_a_test. 輸出樣例: _hs_s_a_tst
// PAT_1033_Type # include <stdio.h> # include <string.h> int main(void) { char Break[50]; char S_Arr[100010]; char Err[] = ""; int len; int i, j=0; int flag_UP = 0; // 若是flag_UP爲0,表示沒壞,則大寫字母正常輸出 int flag = 1; // 標誌每一位是否輸出 int flag_All = 0; gets(Break); // 輸入鍵盤的壞鍵 gets(S_Arr); // 輸入文本段 if (Break == "") { puts(S_Arr); return 0; } len = strlen(S_Arr); // 清除沒法顯示的字符 // 先遍歷一遍Break,看是否有上檔鍵失靈,若是有定義flag_UP=1不輸出大寫字母 while (Break[j] != '\0') { if (Break[j]=='+') { flag_UP = 1; } j++; } for (i=0; i<len; i++) { j = 0; flag = 1; // 挨個遍歷S_Arr,若是flag爲0 則不輸出 // 首先判斷是不是字母,若是不是字母,則不用判斷大小寫 // 開始判斷字母是否符合 // 小寫字母 if (S_Arr[i]>='a'&&S_Arr[i]<='z') { while (Break[j] != '\0') { if ((S_Arr[i]-'a' == Break[j]-'A')) { flag = 0; break; } j++; } } else if (S_Arr[i]>='A'&&S_Arr[i]<='Z') { if (flag_UP == 1) { // 上檔鍵壞了則,大寫字母不輸出 flag = 0; } else { while (Break[j] != '\0') { if (S_Arr[i] == Break[j]) { flag = 0; break; } j++; } } } else { while (Break[j] != '\0') { if (S_Arr[i] == Break[j]) { flag = 0; break; } j++; } } if (flag == 1) { flag_All = 1; printf("%c",S_Arr[i]); } } if (flag_All == 0) { printf(""); } return 0; }
RRRspa