#include <iostream>
#include <string>
#include <vector>
using namespace std;
void print()
{
static int i = 1;
cout << "I'm here [" << i << "]" << endl;
i++;
}
int main() {
string test1 = "1234567890123456789";
string test2 = "67890123456789";
string test3 = "1234";
vector<string> all;
all.push_back(test1);
all.push_back(test2);
all.push_back(test3);
size_t iS = 5;
size_t start = 0;
size_t length = 19;
bool reverse = true;
try {
for (unsigned int i = 0; i < 3; i++)
{
string curr = all[i];
if (reverse)
{
size_t tempLen = length;
if (iS + tempLen > curr.length())
tempLen = curr.length() - iS;
start = curr.length() - (iS + tempLen);
length = tempLen;
}
size_t len = ((start + length) > curr.length()) ? (curr.length() - start) : length;
string part;
part = curr.substr(start, len);
part.assign(part.length(), 0x2A);
cout << "Masked [" << curr << "] is [" << curr.replace(start, len, part) << "]" << endl;
}
}
catch (exception &e)
{
cout << "Caught [" << e.what() << "]" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBwcmludCgpCnsKCXN0YXRpYyBpbnQgaSA9IDE7Cgljb3V0IDw8ICJJJ20gaGVyZSBbIiA8PCBpIDw8ICJdIiA8PCBlbmRsOwoJaSsrOwp9CgppbnQgbWFpbigpIHsKCXN0cmluZyB0ZXN0MSA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5IjsKCXN0cmluZyB0ZXN0MiA9ICI2Nzg5MDEyMzQ1Njc4OSI7CglzdHJpbmcgdGVzdDMgPSAiMTIzNCI7CgkKCXZlY3RvcjxzdHJpbmc+IGFsbDsKCWFsbC5wdXNoX2JhY2sodGVzdDEpOwoJYWxsLnB1c2hfYmFjayh0ZXN0Mik7CglhbGwucHVzaF9iYWNrKHRlc3QzKTsKCXNpemVfdCBpUyA9IDU7CgkKCXNpemVfdCBzdGFydCA9IDA7CglzaXplX3QgbGVuZ3RoID0gMTk7Cglib29sIHJldmVyc2UgPSB0cnVlOwoJCgl0cnkgewoJCQoJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMzsgaSsrKQoJCXsKCQkJc3RyaW5nIGN1cnIgPSBhbGxbaV07CgkJCQoJCQlpZiAocmV2ZXJzZSkKCQkJewoJCQkJc2l6ZV90IHRlbXBMZW4gPSBsZW5ndGg7CgkJCQlpZiAoaVMgKyB0ZW1wTGVuID4gY3Vyci5sZW5ndGgoKSkKCQkJCQl0ZW1wTGVuID0gY3Vyci5sZW5ndGgoKSAtIGlTOwoJCQkJCQoJCQkJc3RhcnQgPSBjdXJyLmxlbmd0aCgpIC0gKGlTICsgdGVtcExlbik7CgkJCQlsZW5ndGggPSB0ZW1wTGVuOwoJCQl9CgkJCQoJCQlzaXplX3QgbGVuID0gKChzdGFydCArIGxlbmd0aCkgPiBjdXJyLmxlbmd0aCgpKSA/IChjdXJyLmxlbmd0aCgpIC0gc3RhcnQpIDogbGVuZ3RoOwoJCQkKCQkJc3RyaW5nIHBhcnQ7CgkJCXBhcnQgPSBjdXJyLnN1YnN0cihzdGFydCwgbGVuKTsKCQkJCgkJCXBhcnQuYXNzaWduKHBhcnQubGVuZ3RoKCksIDB4MkEpOwoJCQkKCQkJY291dCA8PCAiTWFza2VkIFsiIDw8IGN1cnIgPDwgIl0gaXMgWyIgPDwgY3Vyci5yZXBsYWNlKHN0YXJ0LCBsZW4sIHBhcnQpIDw8ICJdIiA8PCBlbmRsOwoJCX0KCX0KCWNhdGNoIChleGNlcHRpb24gJmUpCgl7CgkJY291dCA8PCAiQ2F1Z2h0IFsiIDw8IGUud2hhdCgpIDw8ICJdIiA8PCBlbmRsOwoJfQoJCglyZXR1cm4gMDsKfQ==