Pagini recente » Cod sursa (job #493208) | Cod sursa (job #769897) | Monitorul de evaluare | Autentificare | Cod sursa (job #769884)
Cod sursa(job #769884)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <cstdio>
#include <cstring>
#define character (*word - 'a')
using namespace std;
struct Trie
{
int word, numar;
Trie *ramura[26];
Trie()
{
word = numar = 0;
memset( ramura, 0, sizeof(ramura) );
}
};
void addWord(Trie *trie , char *word)
{
if (*word == '\0')
{
trie->word++;
return;
}
if (trie->ramura[character] == 0)
{
trie->ramura[character] = new Trie;
trie->numar++;
}
addWord(trie->ramura[character], word+1);
}
int numberWords(Trie *trie, char *word)
{
if (*word == '\0')
return trie->word;
if (trie->ramura[character] == 0)
return 0;
return numberWords(trie->ramura[character], word+1);
}
int numberPrefixes(Trie *trie, char *word, int k)
{
if (*word == '\0')
return k;
else
{
if (trie->ramura[character] == 0)
return k;
return numberPrefixes(trie->ramura[character], word+1, k+1);
}
}
int deleteWord (Trie *trie, char *word)
{
if (*word == '\0')
trie->word--;
else if ( deleteWord(trie->ramura[character], word + 1) )
{
trie->ramura[character] = 0;
trie->numar--;
}
if (trie->word == 0 && trie->numar == 0)
{
delete trie;
return 1;
}
return 0;
}
void trieFunction()
{
Trie *trieCuvant = new Trie;
ifstream fin("trie.in");
ofstream fout("trie.out");
short number;
char *word;
char line[32], *p, option;
while (!fin.eof())
{
//fin>>number>>word;
fin.getline(line, 100);
p = strtok(line, " ");
option = p[0];
word = strtok(NULL, "\n");
switch(option)
{
case '0': addWord(trieCuvant, word);
break;
case '1': deleteWord(trieCuvant, word);
break;
case '2': fout<<numberWords(trieCuvant, word)<<"\n";
break;
case '3': fout<<numberPrefixes(trieCuvant, word, 0)<<"\n";
break;
}
}
fin.close();
fout.close();
}
int main ()
{
trieFunction();
return 0;
}