#include <iostream>
#include <string>
#include <vector>
#include <utility>
using namespace std;
string string_replace( const string & s, const string & findS, const std::string & replaceS )
{
string result = s;
auto pos = s.find( findS );
if ( pos == string::npos ) {
return result;
}
result.replace( pos, findS.length(), replaceS );
return string_replace( result, findS, replaceS );
}
string parse(const string& s) {
static vector< pair< string, string > > patterns = {
{ "\\\\" , "\\" },
{ "\\n", "\n" },
{ "\\r", "\r" },
{ "\\t", "\t" },
{ "\\\"", "\"" }
};
string result = s;
for ( const auto & p : patterns ) {
result = string_replace( result, p.first, p.second );
}
return result;
}
int main() {
string s1 = R"(hello\n\"this is a string with escape sequences\"\n)";
string s2 = "hello\n\"this is a string with escape sequences\"\n";
cout << parse(s1) << endl;
cout << ( parse(s1) == s2 ) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dXRpbGl0eT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBzdHJpbmdfcmVwbGFjZSggY29uc3Qgc3RyaW5nICYgcywgY29uc3Qgc3RyaW5nICYgZmluZFMsIGNvbnN0IHN0ZDo6c3RyaW5nICYgcmVwbGFjZVMgKQp7CglzdHJpbmcgcmVzdWx0ID0gczsKCWF1dG8gcG9zID0gcy5maW5kKCBmaW5kUyApOwoJaWYgKCBwb3MgPT0gc3RyaW5nOjpucG9zICkgewoJCXJldHVybiByZXN1bHQ7Cgl9CglyZXN1bHQucmVwbGFjZSggcG9zLCBmaW5kUy5sZW5ndGgoKSwgcmVwbGFjZVMgKTsKCXJldHVybiBzdHJpbmdfcmVwbGFjZSggcmVzdWx0LCBmaW5kUywgcmVwbGFjZVMgKTsKfQoKc3RyaW5nIHBhcnNlKGNvbnN0IHN0cmluZyYgcykgewogICAgc3RhdGljIHZlY3RvcjwgcGFpcjwgc3RyaW5nLCBzdHJpbmcgPiA+IHBhdHRlcm5zID0gewogICAgICAgIHsgIlxcXFwiICwgIlxcIiB9LAogICAgCXsgIlxcbiIsICJcbiIgfSwKICAgIAl7ICJcXHIiLCAiXHIiIH0sCiAgICAJeyAiXFx0IiwgIlx0IiB9LAogICAgCXsgIlxcXCIiLCAiXCIiIH0KICAgIH07CiAgICBzdHJpbmcgcmVzdWx0ID0gczsKICAgIGZvciAoIGNvbnN0IGF1dG8gJiBwIDogcGF0dGVybnMgKSB7CiAgICAJcmVzdWx0ID0gc3RyaW5nX3JlcGxhY2UoIHJlc3VsdCwgcC5maXJzdCwgcC5zZWNvbmQgKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIHMxID0gUiIoaGVsbG9cblwidGhpcyBpcyBhIHN0cmluZyB3aXRoIGVzY2FwZSBzZXF1ZW5jZXNcIlxuKSI7CiAgICBzdHJpbmcgczIgPSAiaGVsbG9cblwidGhpcyBpcyBhIHN0cmluZyB3aXRoIGVzY2FwZSBzZXF1ZW5jZXNcIlxuIjsKICAgIGNvdXQgPDwgcGFyc2UoczEpIDw8IGVuZGw7CiAgICBjb3V0IDw8ICggcGFyc2UoczEpID09IHMyICkgPDwgZW5kbDsKfQ==