Top.Mail.Ru
Ответы

Язык С++ Помогите решить пожалуйта, уже целы день мучаюсь всё ему не так...

помогите пожалуйста с заданием очень нужно, на нём застрял и дальше не дают пройти.

пример чистый из задания. из моих результатов - выходят постоянные ошибки в накладках кучи векторов, либо не принимается последний ответ т.к. там 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. Так вы избежите дублирования кода, и читать его будет проще.



12345678910111213141516171819202122232425262728293031323334353637383940
 #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; 
По дате
По Рейтингу
Аватар пользователя
Новичок
1234567
 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; 
}