#include #include #include #include #include #include #include struct Line { std::string str; }; std::istream& operator>>(std::istream& is, Line& line) { std::getline(is, line.str, '\n'); return is; } std::set get_common_words(std::set const& a, std::set const& b) { std::set common { }; std::set_intersection(std::begin(a), std::end(a), std::begin(b), std::end(b), std::inserter(common, std::end(common))); return common; } int main() { std::cout << "Enter your text: " << std::endl; std::vector> lines { }; std::transform(std::istream_iterator { std::cin }, std::istream_iterator { }, std::back_inserter(lines), [](Line const& line) { std::istringstream iss { line.str }; std::set words { std::istream_iterator{ iss }, std::istream_iterator{ } }; return words; }); lines.erase(std::remove_if(std::begin(lines), std::end(lines), [](auto&& words) { return words.empty(); }), std::end(lines)); if (lines.size() > 0) { std::set common_words { std::accumulate(std::next(std::begin(lines)), std::end(lines), lines.front(), get_common_words) }; if (common_words.size() > 0) { std::cout << "The words common with all lines are: " << std::endl; std::copy(std::begin(common_words), std::end(common_words), std::ostream_iterator{ std::cout, "\n" }); return 0; } } std::cout << "No word appeared on every line." << std::endl; }