1033. 旧键盘打字(20)

来源:互联网 发布:seo黑链代码 编辑:程序博客网 时间:2024/05/22 16:03
#include<iostream>#include<cstring>using namespace std;int c[500/32+1] = {};//刚学的位运算,装个逼,(*^__^*) 嘻嘻…… int main(){    char word[100001];//记录要输出的字符     char temp;//存储每个字符,简化代码     char line_1[500];//记录坏键     gets(line_1);//不能用scanf,没有坏键时scanf不能接收,所以用gets。     int len_1=strlen(line_1);    for(int i=0;i<len_1;i++){//把每个坏键的ascii码所对应的置为1         temp = line_1[i];        c[temp/32]|=(1<<temp%32);    }    scanf("%s",word);    int flag=0;    if(c['+'/32]&(1<<'+'%32))//检测上档键是否坏掉         flag=1;    int len=strlen(word);    for(int i=0;i<len;i++){//输出         if(flag==1){//上档键坏的情况             if(c[word[i]/32]&(1<<word[i]%32));//过滤坏的字符             else if(word[i]>='A'&&word[i]<='Z');//过滤大写字母             else if(word[i]>='a'&&word[i]<='z' && c[(word[i]+('A'-'a'))/32]&(1<<(word[i]+('A'-'a'))%32)) ;//过滤小写字母             else                putchar(word[i]);        }        else{//上档键没坏的情况             if(c[word[i]/32]&(1<<word[i]%32));//过滤坏的字符             else if(word[i]>='a'&&word[i]<='z' && c[(word[i]+('A'-'a'))/32]&(1<<(word[i]+('A'-'a'))%32)) ;//过滤小写字母             else                putchar(word[i]);        }    }    return 0;}