我刚刚写了一个基于Qt的php addSlashes函数,比如,我不希望看到任何改进和建议。我打算使用这个函数来填充一个包含数百个insert查询的文件,更具体地说,我将创建类似php database dump的文件。
QString addSlashes(QString str)
{
QString newStr;
for(int i=0;i<str.length();i++)
{
if(str[i] == '\0')
{
newStr.append('\\');
newStr.append('0');
}
else if(str[i] == '\'')
{
newStr.append('\'');
}
else if(str[i] == '\"')
{
newStr.append('\"');
}
else if(str[i] == '\\')
{
newStr.append('\\');
}
else
newStr.append(str[i]);
}
return newStr;
}发布于 2011-05-11 09:58:57
我认为我应该将数据从代码中分离出来,类似于:
std::map<char, std::string> reps;
reps['\0'] = "\\\0";
reps['\''] = "\\'";
reps['\"'] = "\\\"";
reps['\\'] = "\\\\";
for (int i=0; i<str.length(); i++)
if ((pos=reps.find(str[i])!=reps.end())
newStr.append(pos->second);
else
newStr.append(str[i]);当然,您可能更喜欢使用QMap而不是std::map。这会改变你拼写一些东西的方式,但不会改变基本的想法。
或者,由于每个“特殊”输出只是前面有反斜杠的原始字符,因此您可以只使用需要反斜杠的字符的std::set:
std::set<char> needs_slash;
needs_slash.insert('\'');
needs_slash.insert('\"');
needs_slash.insert('\0');
needs_slash.insert('\\');
for (int i=0; i<str.length(); i++) {
if (needs_slash.find(str[i]) != needs_slash.end())
newStr.append('\\');
newStr.append(str[i]);
}考虑到所涉及的字符数量很少,您也可以使用std::bitset或std::vector<bool>之类的字符。我们谈论的是32字节的存储(假设你只关心256个字符)。当您深入了解它时,map/set只是用作稀疏数组,但是如果您只在一个(甚至几个)位置使用它,那么使用数组无疑会比使用set/map节省更多的空间(在数据中)。
https://stackoverflow.com/questions/5958210
复制相似问题