2
我有一個包含'字符的字符串。我想用\來替換它們,因爲這是用來插入數據庫的。有人可以建議我採取一種有效的方法嗎?不幸的是,我無法使用提升並僅限於STL。用'替換字符串中的單引號'
我有一個包含'字符的字符串。我想用\來替換它們,因爲這是用來插入數據庫的。有人可以建議我採取一種有效的方法嗎?不幸的是,我無法使用提升並僅限於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;
}
最好是做拷貝到一個新的字符串,因爲這是更爲有效,因爲如果每次插入字符,它會轉移這是非常低效的字節數。另外,你可能很難確定你的迭代器是否有效。
最簡單的方法是編寫一個循環來創建新的循環,儘管您可以使用在每次迭代時將插入操作插入新字符串的函子。
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));
提示:不要淨化你的輸入這樣的,只是使用參數查詢,而忘記了這樣那樣的問題。你在使用什麼數據庫庫? – 2011-03-17 16:29:06
其DB2。不幸的是,有一個很大的遺產,我目前無法做出重大改變。但我仍然很想知道參數查詢方法。 – Kiran 2011-03-17 16:31:44