#include <iostream>
#include <string>
#include <iostream>
#include <boost/algorithm/string/replace.hpp>
std::string escape(const std::string& s)
{
auto result = boost::replace_all_copy(s, "\\", "\\\\"); // replace \ with \\
boost::replace_all(result, "\"", "\\\""); // replace " with \"
return result;
}
int main()
{
struct {
std::string s;
std::string expected;
} data[] {
{ "", ""},
{ "abcd", "abcd"},
{ R"(foo\bar)", R"(foo\\bar)"},
{ R"("foo")", R"(\"foo\")"},
};
for(const auto& d : data) {
std::cout << "Test: " << d.s << '\n';
auto result = escape(d.s);
if (result != d.expected) {
std::cout << "FAILLED!!!\n";
std::cout << "expected: " << d.expected << '\n';
std::cout << " actual: " << result << "\n\n";
} else {
std::cout << "pass\n\n";
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxib29zdC9hbGdvcml0aG0vc3RyaW5nL3JlcGxhY2UuaHBwPgoKc3RkOjpzdHJpbmcgZXNjYXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQp7CiAgICBhdXRvIHJlc3VsdCA9IGJvb3N0OjpyZXBsYWNlX2FsbF9jb3B5KHMsICJcXCIsICJcXFxcIik7IC8vIHJlcGxhY2UgXCB3aXRoIFxcCiAgICBib29zdDo6cmVwbGFjZV9hbGwocmVzdWx0LCAiXCIiLCAiXFxcIiIpOyAvLyByZXBsYWNlICIgd2l0aCBcIgogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7CiAgICBzdHJ1Y3QgewogICAgICAgIHN0ZDo6c3RyaW5nIHM7CiAgICAgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQ7CiAgICB9IGRhdGFbXSB7CiAgICAgICAgeyAiIiwgIiJ9LAogICAgICAgIHsgImFiY2QiLCAiYWJjZCJ9LAogICAgICAgIHsgUiIoZm9vXGJhcikiLCBSIihmb29cXGJhcikifSwKICAgICAgICB7IFIiKCJmb28iKSIsIFIiKFwiZm9vXCIpIn0sCiAgICB9OwogICAgZm9yKGNvbnN0IGF1dG8mIGQgOiBkYXRhKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJUZXN0OiAiIDw8IGQucyA8PCAnXG4nOwogICAgICAgIGF1dG8gcmVzdWx0ID0gZXNjYXBlKGQucyk7CiAgICAgICAgaWYgKHJlc3VsdCAhPSBkLmV4cGVjdGVkKSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiRkFJTExFRCEhIVxuIjsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJleHBlY3RlZDogIiA8PCBkLmV4cGVjdGVkIDw8ICdcbic7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiICBhY3R1YWw6ICIgPDwgcmVzdWx0ICAgICA8PCAiXG5cbiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJwYXNzXG5cbiI7CiAgICAgICAgfQogICAgfQp9Cg==