#include <iostream>
#include <sstream>
#include <vector>
#include <string>



std::vector<std::string> extract_tag(std::istream& is, std::string tag_name)
{
    std::vector<std::string> body_tokens;

    std::string token;

    while (is >> token && token != ('<' + tag_name + '>'))
        ;

    while (is >> token && token != ("</" + tag_name + '>'))
        body_tokens.push_back(token);

    return body_tokens;
}

template <typename container_type>
void display(std::ostream& os, const container_type& container)
{
    for (auto& element : container)
        os << element << '\n';
}

std::string text =
R"(<html>
   <body>
      This is a test message.
   </body>
</html>)";


int main()
{
    std::istringstream in_stream(text);
    display(std::cout, extract_tag(in_stream, "body"));
}