首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std string vs char性能,最好的方法是从头删除部分

std string vs char性能,最好的方法是从头删除部分
EN

Stack Overflow用户
提问于 2011-03-16 23:15:38
回答 3查看 1.3K关注 0票数 2

我必须处理一大块文本,从头到尾对它进行线性分析。我想知道哪种方法更好:使用char*或std::string。使用char*时,我可以将指针更改为字符串中更远的位置,例如。

代码语言:javascript
复制
//EDIT later: mallocing some space for text
char str[] = "text to analyse";
char * orig = str;
//process
str += processed_chars; //quite fast
//process again
// later: free(orig);

但是使用字符串,我可能不得不使用std:: string ::erase --但是它会创建一个副本,或者移动字节或者其他东西(我不知道实际的实现)

代码语言:javascript
复制
string str = "text to analyse";
//process
str = str.erase(0,processed_chars);

或者有没有办法改变std::string的隐藏指针?

编辑:由于Sylvain Defresne在这里请求更多代码:

代码语言:javascript
复制
class tag {
public:
    tag(char ** pch) {
        *pch = strstr(*pch,"<");
        if(pch == NULL) return;

        char *orig = *pch+1;
        *pch = strstr(*pch,">");
        if(pch == NULL) return;
        *pch+=sizeof(char); //moving behind the >

        //process inner tag data

        if(*(*pch-2)!='/'){// not selfclose
            while (!(**pch == '<' && *(*pch+1) == '/')){ //sarch for closing tag
                tag* kid = new tag(pch);
                sublings.push_back(*kid);
            }

            *pch = strstr(*pch,">");
            if(pch == NULL) return;
            *pch+=sizeof(char); //moving behind the >

            //add check if the clothing tag is matching

        }
    }
}

我将其用于类似于xml的递归表示法解析

代码语言:javascript
复制
char str[] ="<father><kid /></fatherr>";
char * pch = str;
tag *root = new tag(&pch);

这段代码难看得要死,我只是从低级指针算法和其他东西开始,到目前为止还在使用可视化组件,所以不要太难判断

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-16 23:20:16

对于std::string,您可能会使用std::string::iterator。你的代码应该是:

代码语言:javascript
复制
std::string str = "text to analyse";
std::string::iterator iter = str.begin();

// process
iter += processed_chars; 
票数 5
EN

Stack Overflow用户

发布于 2011-03-16 23:20:35

你可以用char*做的任何事情,你都可以用std::string::iterator来做。

票数 2
EN

Stack Overflow用户

发布于 2011-03-16 23:21:56

您可以使用std::string::iterator (查看here)。

在这样的任务中,std::string不是必需的(但像std::string这样的类在其他情况下非常有用)。

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

https://stackoverflow.com/questions/5327408

复制
相关文章

相似问题

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