旧键盘上坏了几个键,因而在敲一段文字的时候,对应的字符就不会出现。如今给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 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