用\'替换字符串中的单引号

时间:2011-03-17 16:26:40

标签: c++ string stl

我有一个包含'字符的字符串。我想用\'替换所有这些,因为它用于插入数据库。有人可以建议我这样做的有效方法吗?不幸的是,我不能使用boost并限制为STL。

2 个答案:

答案 0 :(得分:5)

当源字符串中出现\时,不要忘记它。

std::string escape(std::string const &s)
{
    std::size_t n = s.length();
    std::string escaped;
    escaped.reserve(n * 2);        // pessimistic preallocation

    for (std::size_t i = 0; i < n; ++i) {
        if (s[i] == '\\' || s[i] == '\'')
            escaped += '\\';
        escaped += s[i];
    }
    return escaped;
}

答案 1 :(得分:3)

最好将副本复制到一个新字符串中,因为这样效率要高得多,因为否则每次插入一个字符时,它都会移动非常低效的字节。另外,您可能会发现很难保持迭代器的有效性。

最简单的方法是编写一个循环来创建新循环,尽管你可以使用一个函数来在每次迭代时插入到新字符串中。

struct escaper
{
  std::string& target;
  explicit escaper( std::string& t ) : target( t ) {}

  void operator()( char ch ) const
  {
     if( ch == '\'') // or switch on any character that 
                     // needs escaping like \ itself
     {
        target.push_back('\\');
     }
     target.push_back( ch );
  }
};

std::string escaped;
std::for_each( instr.begin(), instr.end(), escaper(escaped));