fork(1) download
  1. #include <iostream>
  2. #include <string>
  3. #include <iostream>
  4. #include <boost/algorithm/string/replace.hpp>
  5.  
  6. std::string escape(const std::string& s)
  7. {
  8. auto result = boost::replace_all_copy(s, "\\", "\\\\"); // replace \ with \\
  9. boost::replace_all(result, "\"", "\\\""); // replace " with \"
  10. return result;
  11. }
  12.  
  13. int main()
  14. {
  15. struct {
  16. std::string s;
  17. std::string expected;
  18. } data[] {
  19. { "", ""},
  20. { "abcd", "abcd"},
  21. { R"(foo\bar)", R"(foo\\bar)"},
  22. { R"("foo")", R"(\"foo\")"},
  23. };
  24. for(const auto& d : data) {
  25. std::cout << "Test: " << d.s << '\n';
  26. auto result = escape(d.s);
  27. if (result != d.expected) {
  28. std::cout << "FAILLED!!!\n";
  29. std::cout << "expected: " << d.expected << '\n';
  30. std::cout << " actual: " << result << "\n\n";
  31. } else {
  32. std::cout << "pass\n\n";
  33. }
  34. }
  35. }
  36.  
Success #stdin #stdout 0.01s 5364KB
stdin
Standard input is empty
stdout
Test: 
pass

Test: abcd
pass

Test: foo\bar
pass

Test: "foo"
FAILLED!!!
expected: \"foo\"
  actual: "foo"