TCHS 08, Раунд 2, Фильтр (QueryFilter)

 

Строка query содержит текст – набор слов, разделенных пробелами. Вам необходимо совершить следующие операции:

1. Удалить из текста все слова, содержащиеся в массиве common;

2. Удалить повторяющиеся слова;

3. Отсортировать слова в лексикографическом порядке;

Результирующий набор слов вернуть в виде массива строк.

 

Класс: QueryFilter

Метод: vector<string> preprocess(string query,

                                 vector<string> common)

Ограничения: query содержит от 1 до 50 пробелов и символов ‘a’ – ‘z’, common содержит от 1 до 50 строк, состоящих из букв ‘a’ – ‘z’, все слова в common разные.

 

Вход. Строка query и массив строк common.

 

Выход. Массив строк, получающихся после выполнения операций 1, 2, 3 над текстом query.

 

Пример входа

query

common

"an easy test"

{"a", "an", "the"}

"some really cool stuff that i forgot where to look"

{"i", "the", "to", "a", "an", "that"}

"aaaaaaaaaaaaaaaa"

{"a"}

 

Пример выхода

{"easy", "test"}

{"cool", "forgot", "look", "really", "some", "stuff", "where"}

{"aaaaaaaaaaaaaaaa"}

 

 

РЕШЕНИЕ

обработка строк

 

Выделяем из строки query набор слов при помощи потокового ввода stringstream. Заносим слова во множество s. Повторяющиеся слова удаляются автоматически. Одновременно происходит сортировка слов в лексикографическом порядке. Проходим по массиву common и удаляем все слова, встречающиеся в нем, из множества s. Создаем искомый массив строк res при помощи конструктора копирования (все слова из множества s копируются в res в том же порядке, в котором они находятся в s, то есть в лексикографическом). Возвращаем массив res.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

#include <set>

#include <sstream>

using namespace std;

 

set<string> s;

 

class QueryFilter

{

public:

  vector<string> preprocess(string query, vector<string> common)

  {

    string a;

    int i;

    stringstream in(query);

    while(in >> a) s.insert(a);

    for(i=0;i<common.size();i++) s.erase(common[i]);

    vector<string> res(s.begin(),s.end());

    return res;

  }

};