http://acm.hdu.edu.cn/showproblem.php?pid=1075
/*
START
hh1 aa
END
START
a aa
END
*/

#include
<iostream>
#include
<string>
using namespace std;
int i;
struct dictree
{
    dictree 
*child[26];
    
char engWord[11];
    dictree()
//初始化非常的有必要
    {
        
for(i=0;i<26;i++)
            child[i] 
= NULL;
        engWord[
0]='\0';
    }

}
;
dictree root;
void insert(char eng[],char mar[])//构建字典树
{
    dictree 
*now = &root;
    
char *tmp = mar;
    
while(*tmp)
    
{
        
if(now->child[*tmp-'a']==NULL)
            now
->child[*tmp-'a'= new dictree;
        now 
= now->child[*tmp-'a'];
        tmp
++;
    }

    strcpy(now
->engWord,eng);    
}


char *find(char ch[])//查找单词
{
    dictree 
*= &root;
    
int k=0;
    
while(1)
    
{
        
if(ch[k]=='\0' || p->child[ch[k]-'a']==NULL)
            
break;
        p 
= p->child[ch[k]-'a'];
        k
++;
    }

    
if(ch[k]=='\0' && strcmp(p->engWord,"")!=0)
        
return p->engWord;
    
return NULL;
}


int main()
{
    
char a[11],b[11];
    scanf(
"%s",a);//"START"
    while(scanf("%s",a) && strcmp(a,"END")!=0 )
    
{
        scanf(
"%s",b);
        insert(a,b);
    }

    scanf(
"%s",a);//"START"
    getchar();//吃回车
    char tmp[3002];
    
while(1)
    
{
        gets(tmp);
//用这个比getline()强
        if(strcmp(tmp,"END"== 0 )
            
break;
        
int i,len,k=0;
        len 
= strlen(tmp);
        tmp[len]
=' ';//多加一个' ',输出的时候注意
        tmp[++len]='\0';
        
char tp[3002];
        
for(i=0;i<len;i++)
        
{
            
if(!(tmp[i]>='a' && tmp[i]<='z'))//非小写字母
            {
                tp[k]
='\0';
                
char *temp = find(tp);//查找是否有对应的engWord
                if(temp)//存在这个单词
                    printf("%s",temp);
                
else                                                    
                    printf(
"%s",tp);//可以用cout<<tp;//不可以用puts(tp);用puts有换行
                k=0;
                
if(i!=len-1)//最后有一个' '是多余的
                    cout<<tmp[i];//输出非小写字母字符
            }

            
else //小写字母
                tp[k++]=tmp[i];
        }

        cout
<<endl;
    }

    
return 0;
}


#include<iostream>
#include
<string>
#include
<map>
using namespace std;
map
<string,string>M;
int main()
{
    
string a,b;
    cin
>>a;//"START"
    while(cin>>&& a!="END")
    
{
        cin
>>b;
        M[b] 
= a;
    }

    cin
>>a;//"START"
    getchar();//吃回车
    char tmp[3005];
    
while(1)
    
{
        gets(tmp);
//用这个比getline()强
        if(strcmp(tmp,"END"== 0 )
            
break;
        
int i,len;
        len 
= strlen(tmp);
        b 
= "";
        
for(i=0;i<len;i++)
        
{
            
if(!(tmp[i]>='a' && tmp[i]<='z'))//非小写字母
            {
                
if(M[b]!="")//存在这个单词
                    cout<<M[b];
                
else
                    cout
<<b;
                b
="";
                cout
<<tmp[i];
            }

            
else //小写字母
                b+=tmp[i];
        }

        cout
<<endl;
    }

    
return 0;
}