Pagini recente » Cod sursa (job #2396782) | Cod sursa (job #2584695) | Cod sursa (job #470820) | Cod sursa (job #2790326) | Cod sursa (job #1491061)
#include<stdio.h>
#include<stdlib.h>
typedef struct szoFa{
szoFa* betuk[26];
int darab;
int resz;
}szoFa;
void insertSzo(szoFa* &pont, char* szo);
void deleteSzo(szoFa* &pont, char* szo);
int findCount(szoFa* pont, char* szo);
int findStart(szoFa* pont, char* szo, int melyseg);
int main() {
//FILE * be = fopen("be.txt", "r");
//freopen("ki.txt", "w", stdout);
FILE * be = fopen("trie.in", "r");
freopen("trie.out", "w", stdout);
szoFa* alap = (szoFa*)malloc(sizeof(szoFa));
for (int i = 0; i < 26; ++i) {
alap->betuk[i] = NULL;
}
alap->darab = 0;
alap->resz = -1;
int n;
char c, szo[21];
while (!feof(be)) {
fscanf(be, "%d%c%s", &n,&c,szo);
switch (n) {
case 0:
insertSzo(alap, szo);
break;
case 1:
deleteSzo(alap, szo);
break;
case 2:
printf("%d\n", findCount(alap, szo));
break;
case 3:
printf("%d\n", findStart(alap, szo, 0));
break;
}
}
//_fcloseall();
return 0;
}
void insertSzo(szoFa* &pont, char* szo) {
if (pont->betuk[(szo[0] - 'a')] == NULL) {
pont->betuk[szo[0] - 'a'] = (szoFa*)malloc(sizeof(szoFa));
for (int i = 0; i < 26; ++i) {
pont->betuk[szo[0] - 'a']->betuk[i] = NULL;
}
pont->betuk[szo[0] - 'a']->darab = 0;
pont->betuk[szo[0] - 'a']->resz = 0;
}
pont->betuk[szo[0] - 'a']->resz++;
if (szo[1] == '\0') {
pont->betuk[szo[0] - 'a']->darab++;
return;
}
else insertSzo(pont->betuk[szo[0] - 'a'], szo+1);
}
void deleteSzo(szoFa* &pont, char* szo) {
pont->betuk[szo[0] - 'a']->resz--;
if (szo[1] == '\0') {
pont->betuk[szo[0] - 'a']->darab--;
return;
}
deleteSzo(pont->betuk[szo[0] - 'a'], szo+1);
}
int findCount(szoFa* pont, char* szo) {
if (szo[0] == '\0') return 0;
if (szo[1] == '\0') {
return pont->betuk[szo[0] - 'a']->darab;
}
if (pont->betuk[szo[0] - 'a'] == NULL) return 0;
return findCount(pont->betuk[szo[0] - 'a'], szo + 1);
}
int findStart(szoFa* pont, char* szo, int melyseg) {
if (pont->betuk[szo[0] - 'a'] == NULL) return melyseg;
if (pont->betuk[szo[0] - 'a']->resz == 0) return melyseg;
return findStart(pont->betuk[szo[0] - 'a'], szo + 1, melyseg + 1);
}