给出n行单词,统计出每个单词出现了几次:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
struct Tire
{
int count;
struct Tire *tire[26];
}*a;
string res = "";
void init()
{
a = new Tire;
for(int i = 0; i < 26; i++)
a->tire[i] = NULL;
}
void insert(char ch[])
{
int length = strlen(ch);
int k;
Tire *head = a;
for(int i = 0; i < length; i++)
{
k = (int)(ch[i]-97);
if(head->tire[k] != NULL)
head = head->tire[k];
else
{
head->tire[k] = new Tire;
head = head->tire[k];
head->count = 0;
for(int j = 0; j < 26; j++)
{
head->tire[j] = NULL;
}
}
}
head->count++;
}
int dfs(Tire *p)
{
if(p->count != 0)
{
cout << res;
printf(" %d\n", p->count);
}
for(int i = 0; i < 26; i++)
{
if(p->tire[i] != NULL)
{
res+=(i+97);
dfs(p->tire[i]);
res = res.substr(0, res.length()-1);
}
}
}
int main()
{
char s[10], ss[10];
init();
int len,num=0;
while(gets(s))
{
len = strlen(s);
if(len == 0)
break;
insert(s);
}
dfs(a);
}