您的位置:首页 > 其它

pat乙级1033. 旧键盘打字(20)

2018-03-11 09:20 337 查看

1033. 旧键盘打字(20)

时间限制200 ms
内存限制65536 kB
代码长度限制8000 B
判题程序Standard作者CHEN, Yue
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?输入格式:输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。注意:如果上档键坏掉了,那么大写的英文字母无法被打出。输出格式:在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。输入样例:
7+IE.
7_This_is_a_test.
输出样例:
_hs_s_a_tst

算法设计:

由于ascii码中共有128个字符,可建立一个长度为128的数组broken表示相应位置的键是否已坏,初始化为false,表示键没有坏。遍历第一行字符将broken中坏掉的键对应的位置置true。遍历第二行字符如果不是大写字母且对应键没有坏,则进行输出;对于大写字母还需满足上档键没有坏的条件才能输出。

注意点:

题目要求如果没有一个字符能被打出,则输出空行。但是测试点中并未检测这个条件,即使没有输出空行也能通过。

C++代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
char s1[MAX],s2[MAX];
bool broken[128]={false};//true表示该键坏了,false表示该键完好
gets(s1);//坏掉的键
gets(s2);//应该输入的文字
for(int i=0;s1[i]!='\0';++i)
broken[s1[i]]=true;//在数组broken中把坏掉的键置true
bool output=false;
for(int i=0;s2[i]!='\0';++i)
if(!broken[toupper(s2[i])])//如果对应的键没有坏
//如果该键是大写字母并且上档键没有坏或者不是大写字母则予输出
if(isupper(s2[i])&&!broken['+']||!isupper(s2[i])){
printf("%c",s2[i]);
output=true;
}
if(!output)//如果没有一个字符能被打出,则输出空行。
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: