c++ string的一些常用函数的源码以及string的简单实现

char * strcat(char * dest,const char * src){
    assert((dest!=NULL)&&(src!=NULL));
    char *ret=dest;
    while(*dest++);
    dest--;
    while(*dest++=*src++);
    return ret;
}

char * strcpy(char * dest,const char * src){
    assert((dest!=NULL)&&(src!=NULL));
    char *ret=dest;
    while(*dest++=*src++);
    return ret;
}

int strlen(const char * src){
    assert(src!=NULL);
    int len=0;
    while(*src++!='\0')
        len++;
    return len;
}

int strcmp(const char * src,const char * dest){
    assert((dest!=NULL)&&(src!=NULL));
    int ret=0;
    while(!(ret=*(unsigned char *)src-*(unsigned char *)dest)&&*dest){
        ++src;
        ++dest;
    }
    return ret;
}

const char * strstr(const char * src,const char * sub){
   assert((dest!=NULL)&&(src!=NULL));
   const char * bp;
   const char * sp;
   while(*src){
       bp=src;
       sp=sub;
       while(*bp++==*sp++){
           if(!*sp)
               return src;
       }
       src++;
   }
   return NULL;
}

下面是string类的简单实现:

class string
{
public:
    string(const char *str=NULL){
        if(str==NULL){
            mString=new char[1];
            *mString='\0';
        }else{
            mString=new char[strlen(str)+1];
            strcpy(mString,str);
        }
    }
    
    string(const string & other){//深复制,浅复制完成一个成员一个成员的拷贝,如果成员是类对象,则调用其拷贝构造函数或者默认拷贝构造函数,如果两个对象有指针,则做赋值运算,两个对象的指针指向同一块内存地址,两次析构delete p同一块内存会崩溃
        mString=new char[strlen(str)+1];
        strcpy(mString,other.mString);
    }
    
    ~string(void){
        if(mString!=NULL){
            delete []mString;
            mString=NULL;
        }
    }
    
    string & operator=(const string &other){
        if(this==&other){//检查两个对象是否为同一个
            return *this;
        }
        delete []mString;//释放原有对象的内存
        mString=new char[strlen(str)+1];
        strcpy(mString,other.mString);
        return *this;
    }
    
    string* operator&();//取址运算符
    const string* operator&() const;//const取址运算符
private:
    char * mString;
};

 

posted @ 2013-10-25 20:46  一种微笑  Views(625)  Comments(0)    收藏  举报