Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串中的单引号替换为\';_C++_String_Stl - Fatal编程技术网

C++ 将字符串中的单引号替换为\';

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

我有一个包含“字符”的字符串。我想用\'替换它们,因为这是用来插入数据库的。有人能给我一个有效的方法吗?不幸的是,我不能使用boost,并且仅限于STL。

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

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。不幸的是,这是一个巨大的遗产,我目前无法做出重大改变。但我仍然想知道参数化查询方法。