#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; }
原文:http://www.cnblogs.com/chenxiwenruo/p/6390113.html