C++ 将字符串中的单引号替换为\';
我有一个包含“字符”的字符串。我想用\'替换它们,因为这是用来插入数据库的。有人能给我一个有效的方法吗?不幸的是,我不能使用boost,并且仅限于STL。当它出现在源字符串中时,不要忘记转义C++ 将字符串中的单引号替换为\';,c++,string,stl,C++,String,Stl,我有一个包含“字符”的字符串。我想用\'替换它们,因为这是用来插入数据库的。有人能给我一个有效的方法吗?不幸的是,我不能使用boost,并且仅限于STL。当它出现在源字符串中时,不要忘记转义\ std::string escape(std::string const &s) { std::size_t n = s.length(); std::string escaped; escaped.reserve(n * 2); // pessimistic
\
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;
}
std::string转义(std::string const&s)
{
std::size_t n=s.length();
std::字符串转义;
已转义。保留(n*2);//悲观预分配
对于(标准::大小\u t i=0;i
最好复制到新字符串中,因为这样效率更高,否则每次插入字符时,都会移动字节,这是非常低效的。此外,您可能会发现很难保持迭代器的有效性
最简单的方法是编写一个循环来创建新的循环,尽管可以使用一个函子在每次迭代时插入新字符串
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));
提示:不要像那样对输入进行清理,只需使用参数化查询,并忘记此类问题。您使用的数据库库是什么?它的DB2。不幸的是,这是一个巨大的遗产,我目前无法做出重大改变。但我仍然想知道参数化查询方法。