题中可用的字母包括大小写(给出的坏键的字母,全为大写),数字,"_" “,” “.” “-” “+”,并且用“+”号代表上档键即(SHIFT)。
输入的两行中分别给出那些坏掉的键,以及应该输出的文字。
输出可以出现的结果文字
分析:
1.给出的坏键的字母全为大写,因此为了统一写法应该先转化为小写,这样小写与大写都无法输出了(符合实际)
2.再给出应该出现的字符串时,如有大写字母应该保证其小写字母的键位与上档键(“+”)同时完好才能输出,并且应该输出大写字母,若只有小写字母完好,则输出的为小写。
1 #include<cstdio> 2 #include<cstring> 3 const int maxn = 100010; 4 bool hashTable[256]; 5 char str[maxn]; 6 int main() { 7 memset(hashTable, true, sizeof(hashTable));//初始全部定true,表示键全部完好。 8 gets_s(str);//输入坏掉的键 9 int len = strlen(str); 10 for (int i = 0; i < len; i++) { 11 if (str[i] >= 'A' && str[i] <= 'Z') {//先将字母键位全部转换为小写,方便之后判断是否输出 12 str[i]+= 32; 13 } 14 hashTable[str[i]] = false; //将坏了的键全部标记住。 15 } 16 gets_s(str); //输入应该输入的字符串 17 len = strlen(str); 18 for (int i = 0; i < len; i++) { 19 if (str[i] >= 'A' && str[i] <= 'Z') { 20 int temp = str[i] + 32; 21 if (hashTable[temp] == true && hashTable['+'] == true) {//只有该字母键与上档键全部完好,才可以进行输出大写字母 22 printf("%c", str[i]); 23 } 24 } 25 else if (hashTable[str[i]] == true) { 26 printf("%c", str[i]);//其他键位只要完好便可以输出 27 } 28 } 29 printf("\n"); 30 return 0; 31 }