PAT:1033. 旧键盘打字(20) AC

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int harsh[300];
char str1[100066],str2[100066];

int main()
{
  fill(harsh,harsh+300,true);    //初始化全都是好的
  gets(str1);
  gets(str2);
  int len1=strlen(str1),len2=strlen(str2);
  bool shift=0;            //记录shift有没有坏掉
  for(int i=0 ; i<len1 ; ++i)
  {  
    if(str1[i]>='A' && str1[i]<='Z')
    {  
      str1[i]+=32;        //改为小写字母的ASC    或者写成str1[i]-'A'+'a'
    }
    harsh[str1[i]]=false;      //此按键失效
  }
  for(int i=0 ; i<len2 ; ++i)
  {
    if(str2[i]>='A' && str2[i]<='Z')  //大写字母的时候要看shift是否正常  【skill】上档键用‘+’表示
    {
      int tmp=str2[i]-'A'+'a';  //改为小写字母的ASC
      if(harsh[tmp]==true && harsh['+']==true)    //按键正常且shift也正常
        printf("%c",str2[i]);  //输出该大写字母
    }
    else if(harsh[str2[i]]==true)
      printf("%c",str2[i]);
  }
  return 0;
}
原文地址:https://www.cnblogs.com/Evence/p/4309715.html