2011-03-17 116 views
2

我有一個包含'字符的字符串。我想用\來替換它們,因爲這是用來插入數據庫的。有人可以建議我採取一種有效的方法嗎?不幸的是,我無法使用提升並僅限於STL。用'替換字符串中的單引號'

+7

提示:不要淨化你的輸入這樣的,只是使用參數查詢,而忘記了這樣那樣的問題。你在使用什麼數據庫庫? – 2011-03-17 16:29:06

+0

其DB2。不幸的是,有一個很大的遺產,我目前無法做出重大改變。但我仍然很想知道參數查詢方法。 – Kiran 2011-03-17 16:31:44

回答

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; 
} 
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)); 
相關問題