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

std::vector<std::string> split( const std::string& code, const std::string& sep )
{
    std::vector<std::string> result ;

    std::string::size_type pos = 0 ;
    auto f = code.find(sep) ;
    while( f != std::string::npos )
    {
        result.emplace_back( code.begin()+pos, code.begin()+f ) ;
        pos = f + sep.size() ;
        f = code.find( sep, pos ) ;
    }
    result.push_back( code.substr(pos) ) ;

    return result ;
}

int main()
{
    const std::string word_seperator = "0000000" ;
    const std::string letter_seperator = "000" ;

    const std::string msg = "111000101010100010000000"
                              "1110111010111000101011100010100011101011101000111010111" ;
    std::cout << "msg: " << msg << '\n' ;
    // for each word in msg
    for( const std::string& word : split( msg, word_seperator ) )
    {
        std::cout << "    word: " << word << '\n' ;
        // for each letter in word
        for( const std::string& letter : split( word, letter_seperator ) )
        {
            std::cout << "        letter: " << letter << '\n' ;
            // look up letter in map, get the character
        }
    }
}
