#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
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNwbGl0KCBjb25zdCBzdGQ6OnN0cmluZyYgY29kZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHNlcCApCnsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXN1bHQgOwoKICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gMCA7CiAgICBhdXRvIGYgPSBjb2RlLmZpbmQoc2VwKSA7CiAgICB3aGlsZSggZiAhPSBzdGQ6OnN0cmluZzo6bnBvcyApCiAgICB7CiAgICAgICAgcmVzdWx0LmVtcGxhY2VfYmFjayggY29kZS5iZWdpbigpK3BvcywgY29kZS5iZWdpbigpK2YgKSA7CiAgICAgICAgcG9zID0gZiArIHNlcC5zaXplKCkgOwogICAgICAgIGYgPSBjb2RlLmZpbmQoIHNlcCwgcG9zICkgOwogICAgfQogICAgcmVzdWx0LnB1c2hfYmFjayggY29kZS5zdWJzdHIocG9zKSApIDsKCiAgICByZXR1cm4gcmVzdWx0IDsKfQoKaW50IG1haW4oKQp7CiAgICBjb25zdCBzdGQ6OnN0cmluZyB3b3JkX3NlcGVyYXRvciA9ICIwMDAwMDAwIiA7CiAgICBjb25zdCBzdGQ6OnN0cmluZyBsZXR0ZXJfc2VwZXJhdG9yID0gIjAwMCIgOwoKICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1zZyA9ICIxMTEwMDAxMDEwMTAxMDAwMTAwMDAwMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMTEwMTExMDEwMTExMDAwMTAxMDExMTAwMDEwMTAwMDExMTAxMDExMTAxMDAwMTExMDEwMTExIiA7CiAgICBzdGQ6OmNvdXQgPDwgIm1zZzogIiA8PCBtc2cgPDwgJ1xuJyA7CiAgICAvLyBmb3IgZWFjaCB3b3JkIGluIG1zZwogICAgZm9yKCBjb25zdCBzdGQ6OnN0cmluZyYgd29yZCA6IHNwbGl0KCBtc2csIHdvcmRfc2VwZXJhdG9yICkgKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiICAgIHdvcmQ6ICIgPDwgd29yZCA8PCAnXG4nIDsKICAgICAgICAvLyBmb3IgZWFjaCBsZXR0ZXIgaW4gd29yZAogICAgICAgIGZvciggY29uc3Qgc3RkOjpzdHJpbmcmIGxldHRlciA6IHNwbGl0KCB3b3JkLCBsZXR0ZXJfc2VwZXJhdG9yICkgKQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIgICAgICAgIGxldHRlcjogIiA8PCBsZXR0ZXIgPDwgJ1xuJyA7CiAgICAgICAgICAgIC8vIGxvb2sgdXAgbGV0dGVyIGluIG1hcCwgZ2V0IHRoZSBjaGFyYWN0ZXIKICAgICAgICB9CiAgICB9Cn0K