注意:结构体中每个字母的指针下都可存在一个结构体单元,即26个字母的指针单元。#include<stdio.h> #include<string.h> #include<stdlib.h> struct T { T *ch[26]; int n,flag; }rt; char in[15]; void init(T *t)//初始化 { for(int i=0;i<26;i++) { t->ch[i]=NULL; } t->n=t->flag=0; } void insert(T *t,char *in) { if(*in)//判断输入字符是否为空 { if(t->ch[*in-'a']==NULL) { t->ch[*in-'a']=(T *)malloc(sizeof(T)); init(t->ch[*in-'a']); } (t->ch[*in-'a']->n)++;//该节点出现的次数 insert(t->ch[*in-'a'],in+1); } else { t->flag=1;//标记是否为单词结束 } } int find(T *t,char *in)//寻找单词,递归,释放空间 { if(t->ch[*in-'a']!=NULL) { if(*(in+1)=='\0') { return t->ch[*in-'a']->n; } else { return find(t->ch[*in-'a'],in+1); } } else return 0; } int main() { T *s; s=(T *)malloc(sizeof(T)); init(s); while(gets(in))//有空行输入时使用gets() { if(strlen(in)==0) break; insert(s,in); } while(scanf("%s",in)!=EOF) { printf("%d\n",find(s,in)); } //system("pause"); return 0; }