Pagini recente » Cod sursa (job #512657) | Cod sursa (job #3242106)
#include <iostream>
#include <list>
#include <fstream>
#include <cstring>
#include <cstdio>
using namespace std;
void printList(list<char*> &l){
for(auto it = l.begin(); it!=l.end(); it++){
printf("%s\n", *it);
}
}
void del(list<char*> &l, char* x){
for(auto it = l.begin(); it!=l.end(); it++){
if(strcmp(x, *it) == 0){
l.erase(it);
break;
}
}
}
void countWord(list<char*> l, char *x){
int cnt = 0;
for(auto it = l.begin(); it != l.end(); it++){
if(strcmp(x, *it) == 0){
cnt++;
}
}
printf("%d\n", cnt);
// printf("Number of appereances for word: %s, is : %d\n", x, cnt);
}
void longestPrefix(list<char*> l, char *x){
int res = 0;
for(auto it = l.begin(); it != l.end(); it++){
if(strcmp(x, *it) == 0) continue;
int tmp = 0;
for(int i = 0; i<strlen(*it); i++){
if(x[i] == (*it)[i]) tmp++;
else break;
}
res = tmp > res ? tmp : res;
}
printf("%d\n", res);
// printf("Longest prefix for string: %s, is this many characters: %d\n", x, res);
}
int main(){
char input[25];
list<char*> trie;
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
while(fgets(input, 25, stdin) != 0){
switch(input[0]){
case '0': // insert element in list
trie.push_back(strdup(input + 2)); // or input + 2
break;
case '1': // remove element
del(trie, input + 2);
break;
case '2':
countWord(trie, input + 2);
break;
case '3':
longestPrefix(trie, input+2);
break;
}
}
}