1084. Broken Keyboard (20)-水题

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>

using namespace std;
const int maxn=90;
char str1[maxn];
char str2[maxn];
int vis[37];

int main()
{
    scanf("%s %s",str1,str2);
    memset(vis,0,sizeof(vis));
    int len1=strlen(str1),len2=strlen(str2);
    for(int i=0;i<len1;i++){
        if('a'<=str1[i] && str1[i]<='z'){
            vis[str1[i]-'a']=1;
        }
        else if('A'<=str1[i] && str1[i]<='Z'){
            vis[str1[i]-'A']=1;  //傻了,之前写成str1[i]-'A'+'a' ....
            str1[i]=str1[i]-'A'+'a';//转化成小写,方便后续操作
        }
        else if(str1[i]=='_'){
            vis[26]=1; //'_'
        }
        else{
            vis[str1[i]-'0'+27]=1; //0~9
        }
    }
    for(int i=0;i<len2;i++){
        if('a'<=str2[i] && str2[i]<='z'){
            vis[str2[i]-'a']=2;
        }
        else if('A'<=str2[i] && str2[i]<='Z'){
            vis[str2[i]-'A']=2;
        }
        else if(str2[i]=='_'){
            //if里面一开始少写了个=。。。导致WA。。。
            vis[26]=2; //'_'
        }
        else{
            vis[str2[i]-'0'+27]=2;
        }
    }
    //要按照在str1中的顺序输出,并且是以大写字母的形式
    for(int i=0;i<len1;i++){
        if(str1[i]=='_'){
            if(vis[26]==1){
                printf("_");
                vis[26]=0;//输过一次就不需要再输出了
            }
        }
        else if('a'<=str1[i] && str1[i]<='z'){
            if(vis[str1[i]-'a']==1){
                printf("%c",str1[i]-'a'+'A');
                vis[str1[i]-'a']=0;
            }
        }
        else{
            if(vis[str1[i]-'0'+27]==1){
                printf("%c",str1[i]);
                vis[str1[i]-'0'+27]=0;
            }
        }
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/chenxiwenruo/p/6390113.html