Advertisement
kutuzzzov

Тема 11 урок 5

Aug 19th, 2022
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. #include <cassert>
  2. #include <iostream>
  3. #include <map>
  4. #include <set>
  5. #include <sstream>
  6. #include <string>
  7. #include <algorithm>
  8.  
  9. using namespace std;
  10.  
  11. class Synonyms {
  12. public:
  13.     void Add(const string& first_word, const string& second_word) {
  14.         synonyms_[first_word].insert(second_word);
  15.         synonyms_[second_word].insert(first_word);
  16.     }
  17.  
  18.     size_t GetSynonymCount(const string& word) const {
  19.         if (synonyms_.count(word) != 0) {
  20.             return synonyms_.at(word).size();
  21.         }
  22.         return 0;
  23.     }
  24.  
  25.     bool AreSynonyms(const string& first_word, const string& second_word) const {
  26.         // Напишите недостающий код
  27.         if (count(synonyms_.at(first_word).begin(), synonyms_.at(first_word).end(), second_word)) {
  28.         //    cout << "Слова синонимы: "s << first_word << ", "s << second_word << endl;
  29.             return true;
  30.         } else {
  31.         //    cout << "Слова НЕ синонимы: "s << first_word << ", "s << second_word << endl;
  32.             return false;
  33.         }
  34.     }
  35.  
  36. private:
  37.     map<string, set<string>> synonyms_;
  38. };
  39.  
  40. void TestAddingSynonymsIncreasesTheirCount() {
  41.     Synonyms synonyms;
  42.     assert(synonyms.GetSynonymCount("music"s) == 0);
  43.     assert(synonyms.GetSynonymCount("melody"s) == 0);
  44.  
  45.     synonyms.Add("music"s, "melody"s);
  46.     assert(synonyms.GetSynonymCount("music"s) == 1);
  47.     assert(synonyms.GetSynonymCount("melody"s) == 1);
  48.  
  49.     synonyms.Add("music"s, "tune"s);
  50.     assert(synonyms.GetSynonymCount("music"s) == 2);
  51.     assert(synonyms.GetSynonymCount("tune"s) == 1);
  52.     assert(synonyms.GetSynonymCount("melody"s) == 1);
  53. }
  54.  
  55. void TestAreSynonyms() {
  56.     // Напишите недостающий код
  57.     Synonyms synonyms;
  58.    
  59.     synonyms.Add("music"s, "melody"s);
  60.     synonyms.Add("music"s, "tune"s);
  61.     // Два слова являются синонимами друг друга
  62.     assert(synonyms.AreSynonyms("music"s, "melody"s) == true);
  63.     assert(synonyms.AreSynonyms("music"s, "tune"s) == true);
  64.     // Два слова НЕ являются синонимами друг друга
  65.     assert(synonyms.AreSynonyms("melody"s, "tune"s) == false);
  66.  
  67.     }
  68.  
  69. void TestSynonyms() {
  70.     TestAddingSynonymsIncreasesTheirCount();
  71.     TestAreSynonyms();
  72. }
  73.  
  74. int main() {
  75.     TestSynonyms();
  76.  
  77.     Synonyms synonyms;
  78.  
  79.     string line;
  80.     while (getline(cin, line)) {
  81.         istringstream command(line);
  82.         string action;
  83.         command >> action;
  84.  
  85.         if (action == "ADD"s) {
  86.             string first_word, second_word;
  87.             command >> first_word >> second_word;
  88.             synonyms.Add(first_word, second_word);
  89.         } else if (action == "COUNT"s) {
  90.             string word;
  91.             command >> word;
  92.             cout << synonyms.GetSynonymCount(word) << endl;
  93.         } else if (action == "CHECK"s) {
  94.             string first_word, second_word;
  95.             command >> first_word >> second_word;
  96.             if (synonyms.AreSynonyms(first_word, second_word)) {
  97.                 cout << "YES"s << endl;
  98.             } else {
  99.                 cout << "NO"s << endl;
  100.             }
  101.         } else if (action == "EXIT"s) {
  102.             break;
  103.         }
  104.     }
  105. }
  106. /*
  107. ручная проверка
  108. ADD melody2 music3 music melody
  109. COUNT box
  110. CHECK music2 box
  111. CHECK music3 melody2
  112. CHECK melody music
  113. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement