Advertisement
chevengur

СПРИНТ № 8 | Эффективные линейные контейнеры | Урок 9: Можем лучше: совершенствуем парсинг строки 2

Jun 22nd, 2024 (edited)
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <cassert>
  2. #include <iostream>
  3. #include <string_view>
  4. #include <vector>
  5. #include <map>
  6.  
  7. using namespace std;
  8.  
  9. class Translator {
  10. public:
  11.     void Add(string_view source, string_view target);
  12.     string_view TranslateForward(string_view source) const;
  13.     string_view TranslateBackward(string_view target) const;
  14.  
  15. private:
  16.     vector<string> find_word;
  17.     map<string, string> word_translate_forward;
  18.     map<string, string> word_translate_backward;
  19. };
  20.  
  21. void Translator::Add(string_view source, string_view target)
  22. {
  23.     find_word.emplace_back(source);
  24.     find_word.emplace_back(target);
  25.     string source_view = find_word.at(find_word.size()-2);
  26.     string target_view = find_word.at(find_word.size()-1);
  27.  
  28.     word_translate_forward[source_view] = target_view;
  29.     word_translate_backward[target_view] = source_view;
  30. }
  31.  
  32. string_view Translator::TranslateForward(string_view source) const
  33. {
  34.     string_view x;
  35.  
  36.     if (word_translate_forward.count(static_cast<string>(source)) > 0)
  37.     {
  38.         for (const auto& [key, value] : word_translate_forward)
  39.         {
  40.             x = value;
  41.             return x;
  42.         }
  43.     }
  44.  
  45.     return x;
  46. }
  47.  
  48. string_view Translator::TranslateBackward(string_view target) const
  49. {
  50.     string_view x;
  51.     if (word_translate_backward.count(static_cast<string>(target)) > 0)
  52.     {
  53.         for (const auto& [key, value] : word_translate_backward)
  54.         {
  55.             x = value;
  56.             return x;
  57.         }
  58.     }
  59.     return x;
  60. }
  61.  
  62. void TestSimple() {
  63.     Translator translator;
  64.     translator.Add(string("okno"s), string("window"s));
  65.     translator.Add(string("stol"s), string("table"s));
  66.  
  67.     assert(translator.TranslateForward("okno"s) == "window"s);
  68.     assert(translator.TranslateBackward("table"s) == "stol"s);
  69.     assert(translator.TranslateForward("table"s) == ""s);
  70. }
  71.  
  72. int main()
  73. {
  74.    TestSimple();
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement