1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #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
-
upload with new input
-
result: Success time: 0.01s memory: 2816 kB returned value: 0
"This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]]" "This is a link abcd 1234 [[India]] abcd 1234"


