Язык С++ Помогите решить пожалуйта, уже целы день мучаюсь всё ему не так...
помогите пожалуйста с заданием очень нужно, на нём застрял и дальше не дают пройти.
пример чистый из задания. из моих результатов - выходят постоянные ошибки в накладках кучи векторов, либо не принимается последний ответ т.к. там 3 а должно быть 2.
Есть слова запроса и описание животного. Посчитайте релевантность запроса — размер множества слов, которые входят и в запрос, и в описание. Для этого доработайте функцию CalculateSimilarity из заготовки кода так, чтобы она вернула релевантность.
Формат ввода
Сначала вводится строка-запрос, затем с новой строчки строка-описание.
Формат вывода
Выведите единственное целое число — размер пересечения множеств слов из запроса и описания.
Примеры ответ
tiny cat
cat without tail 1 Слово cat
very kind dog with brown fur
dog with long tail 2 Слова dog и with
small starling
small black starling with small brown eyes 2 Слова small и starling
Тренажёр проверит работу функции CalculateSimilarity. Для этого он вызовет её с разными векторами строк запросов и описаний животных и сравнит релевантность с ожидаемым значением. Не изменяйте типы параметров и возвращаемого значения этой функции, иначе она не пройдёт проверку.
Не выводите никакой дополнительной информации в cout кроме релевантности запроса, иначе программа не пройдёт проверку.
подсказка....
Сделайте из запросов два множества строк, а затем пройдитесь по одному из них и включите во множество-пересечение все слова, которые есть в другом множестве. Для проверки вхождения подойдёт метод count().
Чтобы превратить vector<string> в set<string>, переберите в цикле элементы вектора и вставьте каждый элемент в результирующее множество, используя метод insert().
Вынесите код, который создаёт множество из вектора строк, во вспомогательную функцию. Используйте эту функцию внутри CalculateSimilarity. Так вы избежите дублирования кода, и читать его будет проще.
#include <iostream>
#include <vector>
#include <string>
#include <set>
using namespace std;
int CalculateSimilarity(vector<string> first, vector<string> second) {
// верните размер пересечения множеств слов first и second
}
// SplitIntoWords разбивает строку text на слова и возвращает их в виде вектора
// Слово - последовательность непробельных символов,
// разделённых одним или более пробелов.
vector<string> SplitIntoWords(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;
}
int main() {
string query, description;
getline(cin, query);
getline(cin, description);
cout << CalculateSimilarity(SplitIntoWords(query), SplitIntoWords(description)) << endl;
int CalculateSimilarity(vector<string> first, vector<string> second)
{
int rev = 0;
set<string> second_set(second.begin(), second.end());
for (auto& i : first) rev += second_set.contains(i);
return rev;
}