#include <cstddef>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
void sanitize(std::string &stringValue)
{
// Add backslashes.
for (auto i = stringValue.begin();;) {
auto const pos = std::find_if(
i, stringValue.end(),
[](char const c) { return '\\' == c || '\'' == c || '"' == c; }
);
if (pos == stringValue.end()) {
break;
}
i = std::next(stringValue.insert(pos, '\\'), 2);
}
// Removes others.
stringValue.erase(
std::remove_if(
stringValue.begin(), stringValue.end(), [](char const c) {
return '\n' == c || '\r' == c || '\0' == c || '\x1A' == c;
}
),
stringValue.end()
);
}
int main()
{
std::string s = "hello\" \"wo'rld\\ this is\na test";
std::cout << s << "\n---\n";
sanitize(s);
std::cout << s << "\n---\n";
}
I2luY2x1ZGUgPGNzdGRkZWY+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKdm9pZCBzYW5pdGl6ZShzdGQ6OnN0cmluZyAmc3RyaW5nVmFsdWUpCnsKICAgIC8vIEFkZCBiYWNrc2xhc2hlcy4KICAgIGZvciAoYXV0byBpID0gc3RyaW5nVmFsdWUuYmVnaW4oKTs7KSB7CiAgICAgICAgYXV0byBjb25zdCBwb3MgPSBzdGQ6OmZpbmRfaWYoCiAgICAgICAgICAgIGksIHN0cmluZ1ZhbHVlLmVuZCgpLAogICAgICAgICAgICBbXShjaGFyIGNvbnN0IGMpIHsgcmV0dXJuICdcXCcgPT0gYyB8fCAnXCcnID09IGMgfHwgJyInID09IGM7IH0KICAgICAgICApOwogICAgICAgIGlmIChwb3MgPT0gc3RyaW5nVmFsdWUuZW5kKCkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGkgPSBzdGQ6Om5leHQoc3RyaW5nVmFsdWUuaW5zZXJ0KHBvcywgJ1xcJyksIDIpOwogICAgfQoKICAgIC8vIFJlbW92ZXMgb3RoZXJzLgogICAgc3RyaW5nVmFsdWUuZXJhc2UoCiAgICAgICAgc3RkOjpyZW1vdmVfaWYoCiAgICAgICAgICAgIHN0cmluZ1ZhbHVlLmJlZ2luKCksIHN0cmluZ1ZhbHVlLmVuZCgpLCBbXShjaGFyIGNvbnN0IGMpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnXG4nID09IGMgfHwgJ1xyJyA9PSBjIHx8ICdcMCcgPT0gYyB8fCAnXHgxQScgPT0gYzsKICAgICAgICAgICAgfQogICAgICAgICksCiAgICAgICAgc3RyaW5nVmFsdWUuZW5kKCkKICAgICk7Cn0KCmludCBtYWluKCkKewoJc3RkOjpzdHJpbmcgcyA9ICJoZWxsb1wiIFwid28ncmxkXFwgdGhpcyBpc1xuYSB0ZXN0IjsKCXN0ZDo6Y291dCA8PCBzIDw8ICJcbi0tLVxuIjsKCXNhbml0aXplKHMpOwoJc3RkOjpjb3V0IDw8IHMgPDwgIlxuLS0tXG4iOwp9Cg==