Advertisement
RobertDeMilo

Untitled

Jun 9th, 2024
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.81 KB | None | 0 0
  1. /////////////////////////////////////////////////////////////////////////////
  2. String_view 1/2
  3.        
  4. #include <cassert>
  5. #include <iostream>
  6. #include <string_view>
  7. #include <vector>
  8.  
  9. using namespace std;
  10.  
  11. vector<string_view> SplitIntoWordsView(string_view str) {
  12.     vector<string_view> result;
  13.  
  14.     str.remove_prefix(std::min(str.size(), str.find_first_not_of(' ')));
  15.     const int64_t pos_end = str.npos;
  16.  
  17.     while (!str.empty())
  18.     {
  19.         int64_t space = str.find(' ');
  20.         result.push_back(space == pos_end ? str.substr(0, str.size()) : str.substr(0, space));
  21.         str.remove_prefix(std::min(str.size(), str.find_first_not_of(' ', space)));
  22.     }
  23.  
  24.     return result;
  25. }
  26.  
  27. int main() {
  28.     assert((SplitIntoWordsView("") == vector<string_view>{}));
  29.     assert((SplitIntoWordsView("     ") == vector<string_view>{}));
  30.     assert((SplitIntoWordsView("aaaaaaa") == vector{ "aaaaaaa"sv }));
  31.     assert((SplitIntoWordsView("a") == vector{ "a"sv }));
  32.     assert((SplitIntoWordsView("a b c") == vector{ "a"sv, "b"sv, "c"sv }));
  33.     assert((SplitIntoWordsView("a    bbb   cc") == vector{ "a"sv, "bbb"sv, "cc"sv }));
  34.     assert((SplitIntoWordsView("  a    bbb   cc") == vector{ "a"sv, "bbb"sv, "cc"sv }));
  35.     assert((SplitIntoWordsView("a    bbb   cc   ") == vector{ "a"sv, "bbb"sv, "cc"sv }));
  36.     assert((SplitIntoWordsView("  a    bbb   cc   ") == vector{ "a"sv, "bbb"sv, "cc"sv }));
  37.     cout << "All OK" << endl;
  38. }
  39. //////////////////////////////////////////////////////////////////
  40. #include <iostream>
  41. #include <map>
  42. #include <string_view>
  43. #include <cassert>
  44.  
  45. using namespace std;
  46.  
  47. class Translator {
  48. public:
  49.     Translator() = default;
  50.    
  51.     void Add(string_view source, string_view target) {
  52.         russian_to_english_.insert(pair{source, target});
  53.         english_to_russian_.insert(pair{target, source});
  54.     }
  55.    
  56.     string_view TranslateForward(string_view source) const {
  57.         if (auto search = russian_to_english_.find(static_cast<string>(source)); search != russian_to_english_.end()) {
  58.             return search->second;
  59.         }
  60.         return {};
  61.     }
  62.    
  63.     string_view TranslateBackward(string_view target) const {
  64.         if (auto search = english_to_russian_.find(static_cast<string>(target)); search != english_to_russian_.end()) {
  65.             return search->second;
  66.         }
  67.         return {};
  68.     }
  69.  
  70. private:
  71.     map<string, string> russian_to_english_{};
  72.     map<string, string> english_to_russian_{};
  73. };
  74.  
  75. void TestSimple() {
  76.     Translator translator;
  77.     translator.Add(string("okno"s), string("window"s));
  78.     translator.Add(string("stol"s), string("table"s));
  79.  
  80.     assert(translator.TranslateForward("okno"s) == "window"s);
  81.     assert(translator.TranslateBackward("table"s) == "stol"s);
  82.     assert(translator.TranslateForward("table"s) == ""s);
  83. }
  84.  
  85. int main() {
  86.     TestSimple();
  87.     return 0;
  88. }
  89. ///////////////////////////////////////////////////////////////////////////
  90.  
  91. String_view
  92.  
  93.        
  94. #include<iostream>
  95. #include<algorithm>
  96. #include<string_view>
  97. #include<string>
  98. #include<vector>
  99. #include "log_duration.h"
  100.  
  101. using namespace std;
  102.  
  103. vector<string> SplitIntoWords(const string& text) {
  104.     vector<string> words;
  105.     string word;
  106.     for (const char c : text) {
  107.         if (c == ' ') {
  108.             if (!word.empty()) {
  109.                 // обратите внимание на это место в коде
  110.                 // здесь мы каждый раз копируем найденное слово
  111.                 // в новый элемент в векторе
  112.                 words.push_back(word);
  113.                 word.clear();
  114.             }
  115.         }
  116.         else {
  117.             word += c;
  118.         }
  119.     }
  120.     if (!word.empty()) {
  121.         words.push_back(word);
  122.     }
  123.     return words;
  124. }
  125.  
  126.  
  127.  
  128.  
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement