Advertisement
Kazimirko

Основы С++ / Тема 5 / Урок 4. Улучшаем поиск / Задача 1

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