基于Qt的addSlashes版本等效

|| 我只是写了一个基于Qt的php addSlashes函数,我不会看到任何改进和建议。我打算使用此功能用数百个“ 0”查询填充文件,更具体地说,我将创建类似php数据库的转储。
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;
}
    
已邀请:
我想我将数据与代码分开,例如:
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
。这将改变您拼写几句话的方式,但不会改变基本概念。 另外,由于每个\“ special \”输出都是原始字符,并且前面带有反斜杠,因此您可以只使用需要反斜杠的
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个字符)。当您开始使用它时,地图/集合仅用作稀疏数组,但是如果仅在一个(或什至几个)地方使用它,则无疑会节省更多空间(在代码中) ),而不是使用集合/地图(在数据中)保存。     

要回复问题请先登录注册