您的位置:首页 > 其它

Hdu1075 - What Are You Talking About - 字典树

2014-08-03 16:05 281 查看
#include<stdio.h>
#include<string.h>
struct tree
{
int count;
tree *next[30];
char c[20];
int mark;
tree()
{
count=0;
mark=0;
for(int i=0;i<26;i++)
{
next[i]=NULL;
}
}
}*root;
void build(char *ch,char *word)
{
tree *item=root;
for(int i=0;word[i]!=NULL;i++)
{
int j=word[i]-'a';
if(item->next[j]==NULL)
{
item->next[j]=new tree;
}
item=item->next[j];
item->count++;
}
item->mark=1;
strcpy(item->c,ch);
}
char* find(char *word)
{
tree *item=root;
for(int i=0;word[i]!=NULL;i++)
{
int j=word[i]-'a';
if(item->next[j]==NULL)
{
return NULL;
}
item=item->next[j];
}
if(item->mark==1)
{
return item->c;
}
else
{
return NULL;
}
}
int main()
{
root=new tree;
char word[3005];
char ch[20];
int j,i;
scanf("%s",word);
while(scanf("%s",word),strcmp(word,"END"))
{
scanf("%s",ch);
build(word,ch);
}
scanf("%s",word);
getchar();
while(gets(word),strcmp(word,"END"))
{
int l=strlen(word);
int k=0;
for(i=0;i<l;i++)
{
while(word[i]>='a'&&word[i]<='z')
{
ch[k++]=word[i];
i++;
}
ch[k]='\0';
char* t=find(ch);
if(t!=0)
{
printf("%s",t);
}
else
{
printf("%s",ch);
}
printf("%c",word[i]);
k=0;
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: