Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /////////////////////////////////////////////////////////////////////////////
- String_view 1/2
- #include <cassert>
- #include <iostream>
- #include <string_view>
- #include <vector>
- using namespace std;
- vector<string_view> SplitIntoWordsView(string_view str) {
- vector<string_view> result;
- str.remove_prefix(std::min(str.size(), str.find_first_not_of(' ')));
- const int64_t pos_end = str.npos;
- while (!str.empty())
- {
- int64_t space = str.find(' ');
- result.push_back(space == pos_end ? str.substr(0, str.size()) : str.substr(0, space));
- str.remove_prefix(std::min(str.size(), str.find_first_not_of(' ', space)));
- }
- return result;
- }
- int main() {
- assert((SplitIntoWordsView("") == vector<string_view>{}));
- assert((SplitIntoWordsView(" ") == vector<string_view>{}));
- assert((SplitIntoWordsView("aaaaaaa") == vector{ "aaaaaaa"sv }));
- assert((SplitIntoWordsView("a") == vector{ "a"sv }));
- assert((SplitIntoWordsView("a b c") == vector{ "a"sv, "b"sv, "c"sv }));
- assert((SplitIntoWordsView("a bbb cc") == vector{ "a"sv, "bbb"sv, "cc"sv }));
- assert((SplitIntoWordsView(" a bbb cc") == vector{ "a"sv, "bbb"sv, "cc"sv }));
- assert((SplitIntoWordsView("a bbb cc ") == vector{ "a"sv, "bbb"sv, "cc"sv }));
- assert((SplitIntoWordsView(" a bbb cc ") == vector{ "a"sv, "bbb"sv, "cc"sv }));
- cout << "All OK" << endl;
- }
- //////////////////////////////////////////////////////////////////
- #include <iostream>
- #include <map>
- #include <string_view>
- #include <cassert>
- using namespace std;
- class Translator {
- public:
- Translator() = default;
- void Add(string_view source, string_view target) {
- russian_to_english_.insert(pair{source, target});
- english_to_russian_.insert(pair{target, source});
- }
- string_view TranslateForward(string_view source) const {
- if (auto search = russian_to_english_.find(static_cast<string>(source)); search != russian_to_english_.end()) {
- return search->second;
- }
- return {};
- }
- string_view TranslateBackward(string_view target) const {
- if (auto search = english_to_russian_.find(static_cast<string>(target)); search != english_to_russian_.end()) {
- return search->second;
- }
- return {};
- }
- private:
- map<string, string> russian_to_english_{};
- map<string, string> english_to_russian_{};
- };
- void TestSimple() {
- Translator translator;
- translator.Add(string("okno"s), string("window"s));
- translator.Add(string("stol"s), string("table"s));
- assert(translator.TranslateForward("okno"s) == "window"s);
- assert(translator.TranslateBackward("table"s) == "stol"s);
- assert(translator.TranslateForward("table"s) == ""s);
- }
- int main() {
- TestSimple();
- return 0;
- }
- ///////////////////////////////////////////////////////////////////////////
- String_view
- #include<iostream>
- #include<algorithm>
- #include<string_view>
- #include<string>
- #include<vector>
- #include "log_duration.h"
- using namespace std;
- vector<string> SplitIntoWords(const string& text) {
- vector<string> words;
- string word;
- for (const char c : text) {
- if (c == ' ') {
- if (!word.empty()) {
- // обратите внимание на это место в коде
- // здесь мы каждый раз копируем найденное слово
- // в новый элемент в векторе
- words.push_back(word);
- word.clear();
- }
- }
- else {
- word += c;
- }
- }
- if (!word.empty()) {
- words.push_back(word);
- }
- return words;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement