代码如下:
PS:代码中的注释是我测试中用的,请忽略
#include<iostream>
#include<string>
using namespace std;
struct T
{
int sum;
T *t[26];
T()
{
sum = 0;
for (int i = 0; i < 26; ++i)
{
t[i] = NULL;
}
}
}*TNode;
void insert(T *&root, char *s)
{
int i = 0;
TNode = root;
while (s[i] != '\0')
{
//cout << s[i] << " ";
int j = s[i] - 'a';
if (TNode->t[j] == NULL)
{
//cout << "建新的" << endl;
TNode->t[j] = new T();
}
TNode = TNode->t[j];
TNode->sum++;
//cout << "继续下去sum为:" << TNode->sum << endl;
i++;
}
}
int find(T *&root, char *s)
{
int i = 0;
TNode = root;
while (s[i] != '\0')
{
int j = s[i] - 'a';
if (TNode->t[j] == NULL)
{
return 0;
}
else
{
TNode = TNode->t[j];
}
i++;
}
return TNode->sum;
}
int main()
{
char str[11];
T *root = new T();
while (gets_s(str) && str[0])
{
insert(root, str);
}
while (gets_s(str) && str[0])
{
cout << find(root, str) << endl;
}
return 0;
}