fork(1) download
  1. #include <iostream>
  2. #include <sstream>
  3. #include <vector>
  4. #include <string>
  5.  
  6. const static char _delims[] = { '\\', '"' };
  7. const static std::vector<char> delims(_delims, _delims + 2);
  8.  
  9. class EscapeStr {
  10. const static unsigned short MAX_CHAR = 256;
  11.  
  12. std::string &_elem;
  13. bool _delim[MAX_CHAR];
  14. const char* _escape;
  15. int _escLen;
  16. public:
  17. EscapeStr(std::string &elem,
  18. const std::vector<char> &delim = std::vector<char>(1, '"'),
  19. const std::string &escape = "\\") :
  20. _elem(elem),
  21. _escape(escape.c_str()),
  22. _escLen(escape.size())
  23. {
  24. for (int i = 0; i < MAX_CHAR; i++) {
  25. _delim[i] = false;
  26. }
  27. for (std::size_t i = 0; i < delim.size(); i++) {
  28. _delim[delim[i]] = true;
  29. }
  30. }
  31. void print(std::ostream& os) const {
  32. for (std::size_t i = 0; i < _elem.length(); i++) {
  33. char c = _elem[i];
  34. if (_delim[c]) {
  35. for (int j = 0; j < _escLen; j++) {
  36. os << _escape[j];
  37. }
  38. }
  39. os << _elem[i];
  40. }
  41. }
  42. };
  43.  
  44. std::ostream& operator <<(std::ostream& os, const EscapeStr& t)
  45. {
  46. t.print(os);
  47. return os;
  48. }
  49.  
  50.  
  51. int main()
  52. {
  53. std::ostream os(NULL);
  54. std::string s = "Hi there \"This should be escaped\"";
  55. EscapeStr es(s);
  56. os << es;
  57. std::stringstream oss;
  58. oss << os.rdbuf();
  59. std::cout << oss.str();
  60. std::cout << "Do you see this?";
  61. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
Do you see this?