当先锋百科网

首页 1 2 3 4 5 6 7

1033 旧键盘打字 (20 分)

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

输入格式:

输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 10​5​​ 个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,.-+(代表上档键)。题目保证第 2 行输入的文字串非空。

注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

输出格式:

在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

输入样例:

7+IE.
7_This_is_a_test.

输出样例:

_hs_s_a_tst

总结:用GETS一直在C++包错,此题注意隐含情况输入1可以为空

#include<stdio.h>
//#include<string>
#include<string.h>
//using namespace std;
int count=0;
int main()
{char a1[90],a2[100000];
   gets(a1);
   gets(&a2[0]);
//scanf("%s",a2);
  // printf("%s\n",a2);
 // scanf("%s%s",a1,a2);//a1坏掉的键 
 int len1,len2,indux[67];//A-Z  0~25
   memset(indux,0,66*sizeof(int));
   len1=strlen(a1);        //a-z 26~51 
 len2=strlen(a2);        //0-9 52~61
                         // _   62
                        //,    63
                        //.    64
                        //-    65
                        //+    66 上档键 
for(int i=0;i<len1;i++)
   if(a1[i]<='Z'&&a1[i]>='A')
   {indux[a1[i]-'A']=1;//大写标记为1为坏 
    indux[a1[i]-'A'+26]=1;//小写标记为1为坏 
     }
//   else if(a1[i]<='z'&&a1[i]>='a')
//   indux[a1[i]-'a'+26]=1;//标记为1为坏
   else if(a1[i]<='9'&&a1[i]>='0') 
   indux[a1[i]-'0'+52]=1;//标记为1为坏
   else if(a1[i]=='_')
   indux[62]=1;//标记为1为坏
   else if(a1[i]==',')
   indux[63]=1;//标记为1为坏
   else if(a1[i]=='.')
   indux[64]=1;//标记为1为坏
   else if(a1[i]=='-')
   indux[65]=1;//标记为1为坏
    else if(a1[i]=='+')
   {indux[66]=1;//标记为1为坏
    for(int j=0;j<=25;j++)
    indux[j]=1;
	} 
//for(int i=0;i<67;i++)
//{cout<<indux[i]<<" ";
//if(i==25||i==51||i==61)
//cout<<endl;
//	}	

for(int i=0;i<len2;i++)
    if(a2[i]<='Z'&&a2[i]>='A'&&indux[a2[i]-'A']==0)
	{printf("%c",a2[i]+32);
	count++;
	}
    else  if(a2[i]<='z'&&a2[i]>='a'&&indux[a2[i]-'a'+26]==0)
    //cout<<a2[i]-32;
	{printf("%c",a2[i]);count++;
	}
    else if(a2[i]<='9'&&a2[i]>='0'&&indux[a2[i]-'0'+52]==0)
    {printf("%c",a2[i]);count++;
	}
    else if(a2[i]=='_'&&indux[62]==0)
    {printf("%c",a2[i]);count++;
	}
    else if(a2[i]==','&&indux[63]==0)
    {printf("%c",a2[i]);count++;
	}
     else if(a2[i]=='.'&&indux[64]==0)
    {printf("%c",a2[i]);count++;
	}
    else if(a2[i]=='-'&&indux[65]==0)
    {printf("%c",a2[i]);count++;
	}
    else if(a2[i]=='+'&&indux[66]==0)
    {printf("%c",a2[i]); count++; 
	}
	if(count==0)
	printf("\n");
    return 0;
}