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