首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Qt的addSlashes版本等效

基于Qt的addSlashes版本等效
EN

Stack Overflow用户
提问于 2011-05-11 09:21:46
回答 1查看 873关注 0票数 0

我刚刚写了一个基于Qt的php addSlashes函数,比如,我不希望看到任何改进和建议。我打算使用这个函数来填充一个包含数百个insert查询的文件,更具体地说,我将创建类似php database dump的文件。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2011-05-11 09:58:57

我认为我应该将数据从代码中分离出来,类似于:

代码语言:javascript
复制
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

代码语言:javascript
复制
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::bitsetstd::vector<bool>之类的字符。我们谈论的是32字节的存储(假设你只关心256个字符)。当您深入了解它时,map/set只是用作稀疏数组,但是如果您只在一个(甚至几个)位置使用它,那么使用数组无疑会比使用set/map节省更多的空间(在数据中)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5958210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档