#include <stdio.h> #include <string.h> static char WordTable[26]; static char newWordTable[26]; char large(char temp) { return temp>'Z'?temp-32:temp; } void rebuildkey(char* key, int length,char* newkey, int* newkeylen) { int hashT[26] = {0}; for(int i = 0; i< length;i++) { char temp = large(key[i]); hashT[temp-'A']++; } //重构word table int k = 0; for(int i=0;i<length;i++) { char temp = large(key[i]); if(hashT[temp-'A']) { newkey[k++] = temp; hashT[temp-'A'] = 0; } } *newkeylen = k; } int wordinkey(char word, char* key, int len) { for(int i=0;i<len;i++) { if(word ==key[i]) { return 1; } } return 0; } void rebuildwordtable(char* oldwordtable, char* newwordtable,char* newkey,int newkeylen) { int i =0; for(;i<newkeylen;i++) { newwordtable[i] = newkey[i]; } for(int j =0;j<26;j++) { if(!wordinkey(oldwordtable[j],newkey,newkeylen)) { newwordtable[i++] = oldwordtable[j]; } } } int main() { char key[100]; char str[100]; char newkey[100]; scanf("%s\n",key); scanf("%s\n",str); WordTable[0] = 'A'; for(int i=1;i<26;i++) { WordTable[i] = WordTable[i-1]+1; } int length = strlen(key); int newlen = 0; rebuildkey(key,length, newkey, &newlen); rebuildwordtable(WordTable, newWordTable, newkey, newlen); for(int i = 0;i<strlen(str);i++) { int index = large(str[i])-'A'; if(str[i]<'a') { printf("%c",newWordTable[index]);//大写 } else { printf("%c",(newWordTable[index])+32);//小写 } } return 0; }