Seredenko-V

Переводчик

Jul 16th, 2022
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include <cassert>
  2. #include <iostream>
  3. #include <string_view>
  4. #include <algorithm>
  5. #include <map>
  6. #include <set>
  7.  
  8. using namespace std;
  9.  
  10. class Translator {
  11. public:
  12.     Translator() = default;
  13.  
  14.     void Add(string_view source, string_view target) {
  15.         all_words_.insert(string{ source });
  16.         all_words_.insert(string{ target });
  17.  
  18.         first_to_second_lang_[*all_words_.find(string{ source })] = *all_words_.find(string{ target });
  19.         second_to_first_lang_[*all_words_.find(string{ target })] = *all_words_.find(string{ source });
  20.     }
  21.     string_view TranslateForward(string_view source) const {
  22.         if (first_to_second_lang_.count(source)) {
  23.             return first_to_second_lang_.at(source);
  24.         }
  25.         return "";
  26.     }
  27.     string_view TranslateBackward(string_view target) const {
  28.         if (second_to_first_lang_.count(target)) {
  29.             return second_to_first_lang_.at(target);
  30.         }
  31.         return "";
  32.     }
  33.  
  34. private:
  35.     map<string_view, string_view> first_to_second_lang_;
  36.     map<string_view, string_view> second_to_first_lang_;
  37.     set<string> all_words_;
  38. };
  39.  
  40. void TestSimple() {
  41.     Translator translator;
  42.     translator.Add(string("okno"s), string("window"s));
  43.     translator.Add(string("stol"s), string("table"s));
  44.  
  45.     assert(translator.TranslateForward("okno"s) == "window"s);
  46.     assert(translator.TranslateBackward("table"s) == "stol"s);
  47.     assert(translator.TranslateForward("table"s) == ""s);
  48. }
  49.  
  50. int main() {
  51.     TestSimple();
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment