hdu 1075 字典树

输入有点繁琐

View Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node {
struct node *child[26];
char *str;
}*root;
void insert(char *c1,char *c2)
{
int len=strlen(c2);
struct node *cur,*newnode;
cur=root;
for(int i=0;i<len;i++)
{
if(cur->child[c2[i]-'a']!=0)
cur=cur->child[c2[i]-'a'];
else
{
newnode = new struct node;
cur->child[c2[i]-'a']=newnode;
for(int j=0;j<26;j++)
newnode->child[j]=0;
newnode->str=NULL;
cur=newnode;
}
}
cur->str=new char[15];
strcpy(cur->str,c1);
}
void find_print(char *c2)
{
int len=strlen(c2);
struct node *cur;
cur=root;
if(!len) return ;
for(int i=0;i<len;i++)
{
if(c2[i]<'a'||c2[i]>'z'||cur->child[c2[i]-'a']==0)
{
printf("%s",c2);
return ;
}
else cur=cur->child[c2[i]-'a'];
}
if(cur->str!=NULL)
printf("%s",cur->str);
else printf("%s",c2);
}
int main()
{
char s[15],temp[3005],c1[15],c2[15];
root=new struct node;
for(int i=0;i<26;i++)
root->child[i]=0;
scanf("%s",temp);
while(scanf("%s",c1)&&strcmp(c1,"END")!=0)
{
scanf("%s",c2);
insert(c1,c2);
}
scanf("%s",temp);
getchar();
while(gets(temp)&&strcmp(temp,"END")!=0)
{
int len=strlen(temp);
int num=0;
bool flag=false;
for(int i=0;i<len;i++)
{
if(temp[i]>='a'&&temp[i]<='z')
{
if(flag==false)
flag=true;
s[num++]=temp[i];
}
else
{
if(flag)
{
flag=false;
s[num]='\0';
num=0;
find_print(s);
}
printf("%c",temp[i]);
}
}
if(flag)
{
s[num]='\0';
find_print(s);
}
printf("\n");
}
return 0;
}



  

posted @ 2011-11-25 16:04  Because Of You  Views(264)  Comments(0Edit  收藏  举报