#include <stdio.h>
#include <string.h>
typedef struct node
{
int isword;
char word[12];
struct node *next[26];
node()
{
isword = 0;
memset(next, NULL, sizeof next );
}
} *Tree, T;
Tree root = new node();
void insert(char *wd, char *s)
{
int tmp;
Tree p = root;
while(*s)
{
tmp = *s - 'a';
if(NULL == p->next[tmp])
{
p->next[tmp] = new node();
}
p = p->next[tmp];
s++;
}
p->isword = 1;
strcpy(p->word, wd);
}
char *find(char *s)
{
int tmp;
Tree p = root;
while(*s)
{
int tmp = *s - 'a';
if(NULL == p->next[tmp])
return NULL;
p = p->next[tmp];
s++;
}
if(p->isword == 1)
return p->word;
else //这一句忘加了,怒送了7、8发!!!!
return NULL;
}
int main()
{
char word[12], a[12], b[12];
char str[3100], *p;
int i, j, k, len;
//freopen("d:\\in.txt","r",stdin);
scanf("%s",a);
while(scanf("%s",a)&&strcmp(a,"END")!=0)
{
scanf("%s",b);
insert(a,b);
}
scanf("%s",a);
getchar();
while(gets(str)&&strcmp(str,"END")!=0)
{
len = strlen(str);
for(i=0; i<len; ++i)
{
if(str[i]>='a' && str[i]<='z')
{
j = i;
while(j<len&&str[j]>='a'&&str[j]<='z') j++;
k = 0;
for(int p=i; p<j; ++p)
{
word[k++] = str[p];
}
i = j-1;
word[k] ='\0';
p = find(word);
if(p)
printf("%s",p);
else
printf("%s",word);
}
else
{
printf("%c",str[i]);
}
}
puts("");
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUKewogICAgaW50IGlzd29yZDsKICAgIGNoYXIgd29yZFsxMl07CiAgICBzdHJ1Y3Qgbm9kZSAqbmV4dFsyNl07CiAgICBub2RlKCkKICAgIHsKICAgICAgICBpc3dvcmQgPSAwOwogICAgICAgIG1lbXNldChuZXh0LCBOVUxMLCBzaXplb2YgbmV4dCApOwogICAgfQp9ICpUcmVlLCBUOwpUcmVlIHJvb3QgPSBuZXcgbm9kZSgpOwoKdm9pZCBpbnNlcnQoY2hhciAqd2QsIGNoYXIgKnMpCnsKICAgIGludCB0bXA7CiAgICBUcmVlIHAgPSByb290OwogICAgd2hpbGUoKnMpCiAgICB7CiAgICAgICAgdG1wID0gKnMgLSAnYSc7CiAgICAgICAgaWYoTlVMTCA9PSBwLT5uZXh0W3RtcF0pCiAgICAgICAgewogICAgICAgICAgICBwLT5uZXh0W3RtcF0gPSBuZXcgbm9kZSgpOwogICAgICAgIH0KICAgICAgICBwID0gcC0+bmV4dFt0bXBdOwogICAgICAgIHMrKzsKICAgIH0KICAgIHAtPmlzd29yZCA9IDE7CiAgICBzdHJjcHkocC0+d29yZCwgd2QpOwp9CgpjaGFyICpmaW5kKGNoYXIgKnMpCnsKICAgIGludCB0bXA7CiAgICBUcmVlIHAgPSByb290OwogICAgd2hpbGUoKnMpCiAgICB7CiAgICAgICAgaW50IHRtcCA9ICpzIC0gJ2EnOwogICAgICAgIGlmKE5VTEwgPT0gcC0+bmV4dFt0bXBdKQogICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICBwID0gcC0+bmV4dFt0bXBdOwogICAgICAgIHMrKzsKICAgIH0KICAgIGlmKHAtPmlzd29yZCA9PSAxKQogICAgICAgIHJldHVybiBwLT53b3JkOwogICAgZWxzZSAgLy/ov5nkuIDlj6Xlv5jliqDkuobvvIzmgJLpgIHkuoY344CBOOWPke+8ge+8ge+8ge+8gQogICAgICAgIHJldHVybiBOVUxMOyAKfQoKaW50IG1haW4oKQp7CiAgICBjaGFyIHdvcmRbMTJdLCBhWzEyXSwgYlsxMl07CiAgICBjaGFyIHN0clszMTAwXSwgKnA7CiAgICBpbnQgaSwgaiwgaywgbGVuOwogICAgLy9mcmVvcGVuKCJkOlxcaW4udHh0IiwiciIsc3RkaW4pOwogICAgc2NhbmYoIiVzIixhKTsKICAgIHdoaWxlKHNjYW5mKCIlcyIsYSkmJnN0cmNtcChhLCJFTkQiKSE9MCkKICAgIHsKICAgICAgICBzY2FuZigiJXMiLGIpOwogICAgICAgIGluc2VydChhLGIpOwogICAgfQogICAgc2NhbmYoIiVzIixhKTsKICAgIGdldGNoYXIoKTsKICAgIHdoaWxlKGdldHMoc3RyKSYmc3RyY21wKHN0ciwiRU5EIikhPTApCiAgICB7CiAgICAgICAgbGVuID0gc3RybGVuKHN0cik7CiAgICAgICAgZm9yKGk9MDsgaTxsZW47ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHN0cltpXT49J2EnICYmIHN0cltpXTw9J3onKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBqID0gaTsKICAgICAgICAgICAgICAgIHdoaWxlKGo8bGVuJiZzdHJbal0+PSdhJyYmc3RyW2pdPD0neicpIGorKzsKICAgICAgICAgICAgICAgIGsgPSAwOwogICAgICAgICAgICAgICAgZm9yKGludCBwPWk7IHA8ajsgKytwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHdvcmRbaysrXSA9IHN0cltwXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGkgPSBqLTE7CiAgICAgICAgICAgICAgICB3b3JkW2tdID0nXDAnOwogICAgICAgICAgICAgICAgcCA9IGZpbmQod29yZCk7CiAgICAgICAgICAgICAgICBpZihwKQogICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLHApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLHdvcmQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsc3RyW2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwdXRzKCIiKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==