Pagini recente » Cod sursa (job #817685) | Cod sursa (job #1251834) | Cod sursa (job #2721109) | Cod sursa (job #412423) | Cod sursa (job #1918753)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct nod
{
int ap,nrFii;
nod *F[26];
nod()
{
nrFii=ap=0;
for(int i=0; i<26; i++)
F[i]=0;
}
};
nod *root,*q,*aux,*aux2;
int i;
int lg,l;
void insertCuv(char cuvant[])
{
for(i=0,q=root; i<lg; i++)
{
if(!(q->F[*(cuvant+i)-'a']))
{
aux=new nod;
aux->ap=0;
q->F[*(cuvant+i)-'a']=aux;
}
q=q->F[*(cuvant+i)-'a'];
//cout<<*(cuv+i)<<" ";
}
//cout<<endl;
q->ap+=1;
}
void deleteCuvant(char cuvant[])
{
for(i=0,q=root; i<lg; i++)
{
q=q->F[*(cuvant+i)-'a'];
}
q->ap-=1;
}
void aparitieCuvant(char cuvant[])
{
for(i=0,q=root; i<lg; i++)
{
if(!(q->F[*(cuvant+i)-'a']))
{
printf("0\n");
return;
}
q=q->F[*(cuvant+i)-'a'];
}
printf("%d\n",q->ap);
}
void prefix(char cuvant[])
{
q=root;
l=0;
while(l<lg&&q->F[(*(cuvant+l)-'a')])
{
//cout<<*(cuv+l)<<" ";
q=q->F[(*(cuvant+l)-'a')];
l++;
}
printf("%d\n",l);
}
int main()
{
int op;
char cuv[22];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
root =new nod;
for(; scanf("%d %s\n",&op,cuv)+1;)
{
lg=strlen(cuv);
if(op==0)
insertCuv(cuv);
if(op==1)
deleteCuvant(cuv);
if(op==2)
aparitieCuvant(cuv);
if(op==3)
prefix(cuv);
}
return 0;
}