Как сравнивать каждое слово друг с другом в предложения в C++
//Присвоить переменной F значение true, если в предложении S1 есть хотя бы одно слово, которое отсутствует в предложении S2 , и false – в противном случае.
#include <iostream>
#include <string>
using namespace std;
bool find(char*, char*);
int main() {
setlocale(LC_ALL, "Russian");
char S1[] = "Тест сегодня будет";
char S2[] = "Тест сегодня будет отличным";
cout << S1 << endl;
cout << S2 << endl;
bool F = find(S1, S2);
cout << boolalpha << F;
}
bool find(char* S1, char* S2) {
char* p;
char* pp;
for (p = strtok_s(S1, " ", &pp); p; p = strtok_s(NULL, " ", &pp)){
if (strstr(S2, p) == NULL)
return true;
}
return false;
}
Программа будет выводить false, если в предложении S2 соединить соединить первые 2 слова(Тест сегодня). Как я понял, программа сравнивает слово с предложением, как сделать так, чтобы слово сравнивалось с каждым словом?
Ответы (1 шт):
Сначала пишете и отлаживаете функцию, которая строку разбивает на слова. Например:
std::vector<std::string> split( const char *str );
Далее получаете два списка слов. Проходите по циклу по первому списку и ищете каждое слово во втором. Если не найдено сразу возвращаете true, если найдено продолжаете искать. Если цикл завершился, возвращаете false. Функцию поиска можете написать сами или использовать std::find. Либо используйте контейнер со встроенным поиском для второй последовательности - std::unordered_set<std::string> к примеру.