今天又做了一道字典树~本题好像还可以用map 做
备忘
#include <iostream>
using namespace std;
struct node
{
char s[20];
node *next[26];
};
void Insert(char *a,char *b,node *T)
{
node *p,*q;
p=T;
int len1=strlen(a);
int len2=strlen(b);
for(int i=0;i<len2;i++)
{
int id=b[i]-'a';
if(p->next[id]==NULL)
{
q=(node *)malloc(sizeof(node));
memset(q->s,'\0',sizeof(q->s));
for(int j=0;j<26;j++)
q->next[j]=NULL;
p->next[id]=q;
}
p=p->next[id];
}
strcpy(p->s,a);
}
void Search(char *a,node *T)
{
node *p=T;
int len=strlen(a);
for(int i=0;i<len;i++)
{
int id=a[i]-'a';
if(p->next[id]==NULL)
{
cout<<"eh"<<endl;
return;
}
p=p->next[id];
}
if(p->s[0]!='\0')
printf("%s\n",p->s);
else
printf("eh\n");
}
int main()
{
char a[20],b[20],c[40];
node *T=(node *)malloc(sizeof(node));
memset(T->s,'\0',sizeof(T->s));
for(int i=0;i<26;i++)
T->next[i]=NULL;
while(gets(c)&&c[0]!='\0')
{
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
int len=strlen(c);
int i,k;
for( i=0;c[i]!=' ';i++)
a[i]=c[i];
i=i+1;
for(k=0;i<len;i++)
b[k++]=c[i];
Insert(a,b,T);
}
while(scanf("%s",a)!=EOF)
{
Search(a,T);
}
return 0;
}