Advertisement
Kazimirko

Основы С++ / Тема 6 / Урок 2. Глубокое копирование / Задача 1

Apr 14th, 2021
1,302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. /*
  2. Основы С++ / Тема 6 / Урок 2. Глубокое копирование / Задача 1
  3.  
  4. Задание
  5. Посмотрите на код, разбивающий текст на слова с учётом стоп-слов. Избавьтесь от лишних копирований в заголовках функций и в циклах for. Для этого допишите к типам амперсанды в нужных участках кода. Тип string замените на string&, set<string> — на set<string>&. Как именно это работает, узнаете в следующем уроке.
  6. */
  7.  
  8. // final050.cpp
  9.  
  10. #include <iostream>
  11. #include <set>
  12. #include <string>
  13. #include <vector>
  14.  
  15. using namespace std;
  16.  
  17.  
  18. vector<string> SplitIntoWords(string& text) {
  19.     vector<string> words;
  20.     string word;
  21.     for (int i = 0; i < text.size(); ++i) {
  22.         if (text[i] == ' ') {
  23.             words.push_back(word);
  24.             word = ""s;
  25.         } else {
  26.             word += text[i];
  27.         }
  28.     }
  29.     words.push_back(word);
  30.    
  31.     return words;
  32. }
  33.  
  34. set<string> ParseStopWords(string& text) {
  35.     set<string> stop_words;
  36.     for (string& word : SplitIntoWords(text)) {
  37.         stop_words.insert(word);
  38.     }
  39.     return stop_words;
  40. }
  41.  
  42. vector<string> ParseQuery(string& text, set<string>& stop_words) {
  43.     vector<string> words;
  44.     for (string& word : SplitIntoWords(text)) {
  45.         if (stop_words.count(word) == 0) {
  46.             words.push_back(word);
  47.         }
  48.     }
  49.     return words;
  50. }
  51.  
  52.  
  53. int main() {
  54.     // Read stop words
  55.     string stop_words_joined;
  56.     getline(cin, stop_words_joined);
  57.     set<string> stop_words = ParseStopWords(stop_words_joined);
  58.    
  59.     // Read query
  60.     string query;
  61.     getline(cin, query);
  62.     vector<string> query_words = ParseQuery(query, stop_words);
  63.    
  64.     for (string& word : query_words) {
  65.         cout << '[' << word << ']' << endl;
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement