因为没开字符串数组WA到爽。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define maxn 30
char a[500050][15];
struct Trie{
Trie * next[maxn];
char * english;
};
Trie * root;
void Init_Trie(){
root = (Trie *)malloc(sizeof(Trie));
for(int i=0;i<maxn;i++){
root -> next[i] = NULL;
}
}
void Add_Trie(char * lish,char * str){
Trie * p = root , * q;
for(int i=0;str[i]!='\0';i++){
int id = str[i] - 'a';
if(p->next[id]==NULL){
q = (Trie *)malloc(sizeof(Trie));
q -> english = NULL;
for(int j=0;j<maxn;j++){
q -> next[j] = NULL;
}
p -> next[id] = q;
p = p -> next[id];
}
else {
p = p -> next[id];
}
}
p -> english = lish;
}
char * Search_Trie(char * str){
Trie * p = root;
for(int i=0;str[i]!='\0';i++){
int id = str[i] - 'a';
if(p->next[id]==NULL)return NULL;
p = p -> next[id];
}
//return p -> v;//返回以搜索串为前缀的数量
return p->english;
}
void Del_Trie(Trie * p){
for(int i=0;i<maxn;i++){
if(p->next[i])Del_Trie(p->next[i]);
}
free(p);
}
void input(){
Init_Trie();
char tempa[15],tempb[15];
int k = 0;
scanf("%s",a[k++]);
while(scanf("%s %s",a[k++],tempb)){
if(strcmp(a[k-1],"END")==0)break;
Add_Trie(a[k-1],tempb);
}
getchar();
char c = getchar();
while(1){
int k =0;
while(c>='a'&&c<='z'){
tempa[k++] = c;
c = getchar();
}
tempa[k] = '\0';
if(Search_Trie(tempa)==NULL)
printf("%s",tempa);
else
printf("%s",Search_Trie(tempa));
printf("%c",c);
c = getchar();
while(c<'a'||c>'z'){
if(c>'A'&&c<'Z'){if(c=='D')goto w;c = getchar();continue;}
printf("%c",c);
c = getchar();
}
}
w:;
Del_Trie(root);
}
void File(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main(void){
//File();
input();
return 0;
}