PAT(Basic Level) 1033:旧键盘打字(C语言实现)
错误分析:运行超时,在循环判断时每次都要运算一次strlen(),当字符串很长时间,运行超时。
注意:题目保证第二个串非空,第一个串可能为空,不能用scanf输入,而用gets输入。
学习:tolower函数,如果字符为大写字符则转换为小写字符,如果是其他字符则不做任何处理。
本题和1029:旧键盘类似
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int flag[255]={0},i,m,n;//flag记录哪些按键坏掉(ASCII)
char c1[50]={0},c2[100001]={0};
gets(c1);
gets(c2);
m=strlen(c1);
n=strlen(c2);
for(i=0;i<m;i++)
flag[tolower(c1[i])]=1;
for(i=0; i<n; i++)
{
if(!flag[tolower(c2[i])])
{
if(flag['+'] && isupper(c2[i]))//上键坏掉
continue;
putchar(c2[i]);
}
}
return 0;
}