在结构体里增加一个计数的变量就好了。
#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\n", FinTrie(str));
}
DelTrie(Root);
return 0;
}