#include <iostream>
#include <string>
typedef std::string::size_type pos_t;
std::string cleanLinks (const std::string & s)
{
pos_t openBrackets = s.find("[[");
// Set the result as anything before the first link.
std::string result = s.substr(0,openBrackets);
if ( std::string::npos == openBrackets )
return result;
// Search on from the first opening brackts to the closing brackets.
pos_t closeBrackets = s.find("]]", openBrackets);
if ( std::string::npos == closeBrackets )
return result;
// At this point, result contains anything up to the first link ("[[").
// If there are no links, we won't get here.
// Make a string consisting of just the (first) link.
std::string linkStr = s.substr(openBrackets, closeBrackets-openBrackets+2);
// If the link contains a |, split it out into text, and add that to
// the result. Otherwise add the whole thing to the result unchanged.
pos_t pipePos = linkStr.find("|");
if ( std::string::npos == pipePos )
{
result += linkStr;
}
else
{
result += linkStr.substr(2, pipePos-2);
}
// Clean up any links in the rest of the string, then give it all back.
return result + cleanLinks(s.substr(closeBrackets+2, std::string::npos));
}
int main()
{
std::string inp =
"This is a link [[abcd 1234|xyz 1234]] "
"[[India]] [[abcd 1234|xyz 1234]]";
std::cout << '\"' << inp << "\"\n\"" << cleanLinks(inp) << "\"\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdHlwZWRlZiBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvc190OwoKc3RkOjpzdHJpbmcgY2xlYW5MaW5rcyAoY29uc3Qgc3RkOjpzdHJpbmcgJiBzKQp7CiAgICBwb3NfdCBvcGVuQnJhY2tldHMgPSBzLmZpbmQoIltbIik7CiAgICAvLyBTZXQgdGhlIHJlc3VsdCBhcyBhbnl0aGluZyBiZWZvcmUgdGhlIGZpcnN0IGxpbmsuCiAgICBzdGQ6OnN0cmluZyByZXN1bHQgPSBzLnN1YnN0cigwLG9wZW5CcmFja2V0cyk7CiAgICBpZiAoIHN0ZDo6c3RyaW5nOjpucG9zID09IG9wZW5CcmFja2V0cyApCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKCiAgICAvLyBTZWFyY2ggb24gZnJvbSB0aGUgZmlyc3Qgb3BlbmluZyBicmFja3RzIHRvIHRoZSBjbG9zaW5nIGJyYWNrZXRzLgogICAgcG9zX3QgY2xvc2VCcmFja2V0cyA9IHMuZmluZCgiXV0iLCBvcGVuQnJhY2tldHMpOwogICAgaWYgKCBzdGQ6OnN0cmluZzo6bnBvcyA9PSBjbG9zZUJyYWNrZXRzICkKICAgICAgICByZXR1cm4gcmVzdWx0OwoKICAgIC8vIEF0IHRoaXMgcG9pbnQsIHJlc3VsdCBjb250YWlucyBhbnl0aGluZyB1cCB0byB0aGUgZmlyc3QgbGluayAoIltbIikuCiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbGlua3MsIHdlIHdvbid0IGdldCBoZXJlLgoKICAgIC8vIE1ha2UgYSBzdHJpbmcgY29uc2lzdGluZyBvZiBqdXN0IHRoZSAoZmlyc3QpIGxpbmsuCiAgICBzdGQ6OnN0cmluZyBsaW5rU3RyID0gcy5zdWJzdHIob3BlbkJyYWNrZXRzLCBjbG9zZUJyYWNrZXRzLW9wZW5CcmFja2V0cysyKTsKCiAgICAvLyBJZiB0aGUgbGluayBjb250YWlucyBhIHwsIHNwbGl0IGl0IG91dCBpbnRvIHRleHQsIGFuZCBhZGQgdGhhdCB0bwogICAgLy8gdGhlIHJlc3VsdC4gT3RoZXJ3aXNlIGFkZCB0aGUgd2hvbGUgdGhpbmcgdG8gdGhlIHJlc3VsdCB1bmNoYW5nZWQuCiAgICBwb3NfdCBwaXBlUG9zID0gbGlua1N0ci5maW5kKCJ8Iik7CiAgICBpZiAoIHN0ZDo6c3RyaW5nOjpucG9zID09IHBpcGVQb3MgKQogICAgewogICAgICAgIHJlc3VsdCArPSBsaW5rU3RyOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJlc3VsdCArPSBsaW5rU3RyLnN1YnN0cigyLCBwaXBlUG9zLTIpOwogICAgfQoKICAgIC8vIENsZWFuIHVwIGFueSBsaW5rcyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLCB0aGVuIGdpdmUgaXQgYWxsIGJhY2suCiAgICByZXR1cm4gcmVzdWx0ICsgY2xlYW5MaW5rcyhzLnN1YnN0cihjbG9zZUJyYWNrZXRzKzIsIHN0ZDo6c3RyaW5nOjpucG9zKSk7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmcgaW5wID0KICAgICAgICAiVGhpcyBpcyBhIGxpbmsgW1thYmNkIDEyMzR8eHl6IDEyMzRdXSAgIgogICAgICAgICJbW0luZGlhXV0gW1thYmNkIDEyMzR8eHl6IDEyMzRdXSI7CiAgICBzdGQ6OmNvdXQgPDwgJ1wiJyA8PCBpbnAgPDwgIlwiXG5cIiIgPDwgY2xlYW5MaW5rcyhpbnApIDw8ICJcIlxuIjsKICAgIHJldHVybiAwOwp9