在结构体里增加一个计数的变量就好了。
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> using namespace std; const int MAX = 26; struct Trie { int sum; Trie *next[MAX]; Trie() { sum = 0; memset(next, NULL, sizeof(next)); } }; Trie *Root = new Trie; void CreTrie(char *str) { int len = strlen(str); Trie *p = Root; for (int i = 0; i < len; i++) { int pos = str[i] - 'a'; if (!p->next[pos]) { p->next[pos] = new Trie; } p = p->next[pos]; p->sum++; } } int FinTrie(char *str) { int len = strlen(str); Trie *p = Root; for (int i = 0; i < len; i++) { int pos = str[i] - 'a'; if (!(p->next[pos])) { return 0; } p = p->next[pos]; } return p->sum; } void DelTrie(Trie *T) { for (int i = 0; i < MAX; i++) { if (T->next[i]) { DelTrie(T->next[i]); } } delete[] T; } int main() { freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); char str[10]; while (gets(str)) { if (0 == strlen(str)) { break; } CreTrie(str); } while (~scanf("%s", str)) { printf("%d ", FinTrie(str)); } DelTrie(Root); return 0; }