#include <iostream>
#include <string>
#include <vector>
#include <utility>
using Match = std::pair<std::string::size_type, std::string>;
using MatchVec = std::vector<Match>;
MatchVec findPattern(const std::string &str, const std::string &pattern)
{
MatchVec vec;
Match m;
std::string::size_type index, pos = 0;
while ((index = str.find(pattern, pos)) != std::string::npos) {
m.first = index;
index += pattern.length();
m.second = str.substr(index, 6);
vec.push_back(m);
pos = index;
}
return vec;
}
int main()
{
std::string str1 = "abccccfffcccccc";
std::string str2 = "ab";
auto matches = findPattern(str1, str2);
for(auto &match : matches) {
std::cout << "Match found at position: " << match.first << std::endl;
std::cout << "String is " << match.second << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dXRpbGl0eT4KCnVzaW5nIE1hdGNoID0gc3RkOjpwYWlyPHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUsIHN0ZDo6c3RyaW5nPjsKdXNpbmcgTWF0Y2hWZWMgPSBzdGQ6OnZlY3RvcjxNYXRjaD47CgpNYXRjaFZlYyBmaW5kUGF0dGVybihjb25zdCBzdGQ6OnN0cmluZyAmc3RyLCBjb25zdCBzdGQ6OnN0cmluZyAmcGF0dGVybikKewogICAgTWF0Y2hWZWMgdmVjOwogICAgTWF0Y2ggbTsKCiAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGluZGV4LCBwb3MgPSAwOwoKICAgIHdoaWxlICgoaW5kZXggPSBzdHIuZmluZChwYXR0ZXJuLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgIG0uZmlyc3QgPSBpbmRleDsKICAgICAgICBpbmRleCArPSBwYXR0ZXJuLmxlbmd0aCgpOwogICAgICAgIG0uc2Vjb25kID0gc3RyLnN1YnN0cihpbmRleCwgNik7CiAgICAgICAgdmVjLnB1c2hfYmFjayhtKTsKICAgICAgICBwb3MgPSBpbmRleDsKICAgIH0KCiAgICByZXR1cm4gdmVjOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6c3RyaW5nIHN0cjEgPSAiYWJjY2NjZmZmY2NjY2NjIjsKICAgIHN0ZDo6c3RyaW5nIHN0cjIgPSAiYWIiOwoKICAgIGF1dG8gbWF0Y2hlcyA9IGZpbmRQYXR0ZXJuKHN0cjEsIHN0cjIpOwogICAgZm9yKGF1dG8gJm1hdGNoIDogbWF0Y2hlcykgewogICAgICAgIHN0ZDo6Y291dCA8PCAiTWF0Y2ggZm91bmQgYXQgcG9zaXRpb246ICIgPDwgbWF0Y2guZmlyc3QgPDwgc3RkOjplbmRsOwogICAgICAgIHN0ZDo6Y291dCA8PCAiU3RyaW5nIGlzICIgPDwgbWF0Y2guc2Vjb25kIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==