Advertisement
Josif_tepe

Untitled

Nov 27th, 2024
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <map>
  4. #include <codecvt>
  5. #include <locale>
  6. using namespace std;
  7. const int ALPHABET_SIZE = 36;
  8. map<wchar_t, int> alphabet;
  9. struct node {
  10.     node * children_of_node[ALPHABET_SIZE];
  11.     bool is_end_of_word;
  12.    
  13.     node() {
  14.         is_end_of_word = false;
  15.         for(int i = 0; i < ALPHABET_SIZE; i++) {
  16.             children_of_node[i] = NULL;
  17.         }
  18.     }
  19. };
  20.  
  21. void add_word(node * trie, wstring word) {
  22.     node * tmp = trie;
  23.     for(int i = 0; i <(int) word.length(); i++) {
  24.         int c = alphabet[word[i]];
  25.         if(tmp -> children_of_node[c] == NULL) {
  26.             tmp -> children_of_node[c] = new node();
  27.         }
  28.         tmp = tmp -> children_of_node[c];
  29.     }
  30.     tmp -> is_end_of_word = true;
  31. }
  32. bool search_word(node * trie, wstring word) {
  33.     node * tmp = trie;
  34.     for(int i = 0; i < (int) word.length(); i++) {
  35.         int c = alphabet[word[i]];
  36.         if(tmp -> children_of_node[c] == NULL) {
  37.             return false;
  38.         }
  39.         tmp = tmp -> children_of_node[c];
  40.     }
  41.     return tmp -> is_end_of_word;
  42. }
  43. int main() {
  44.     wifstream file("all.txt");
  45.     file.imbue(locale(file.getloc(), new codecvt_utf8<wchar_t>));
  46.    
  47.     if(!file.is_open()) {
  48.         cout << "Error opening file!" << endl;
  49.         return 0;
  50.     }
  51.    
  52.     locale::global(locale("mk_MK.UTF-8"));
  53.     wcout.imbue(locale());
  54.     wcin.imbue(locale());
  55.     node * trie = new node();
  56.     wstring word;
  57.     int r = 0;
  58.     int cnt = 1;
  59.     while(file >> word) {
  60.         for(wchar_t c : word) {
  61.             if(alphabet[c] == 0) {
  62.                 alphabet[c] = cnt;
  63.                 cnt++;
  64.             }
  65.         }
  66.         add_word(trie, word);
  67.     }
  68.    
  69.     wstring s;
  70.     wcin >> s;
  71.     cout << s.length() << endl;
  72.     for(wchar_t c : s) {
  73.         cout << alphabet[c] << " ";
  74.     }
  75.     wcout << s << endl;
  76.    
  77.    
  78.     if(search_word(trie, s)) {
  79.         wcout << "Ovoj zbor se naoga vo datotekata" << endl;
  80.     }
  81.     else {
  82.         wcout << "Ovoj zbor ne se naoga vo datotekata" << endl;
  83.     }
  84.    
  85.     return 0;
  86. }
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement