String 类的实现 以及 Strcpy、Strcat函数的实现

来源:互联网 发布:长征六号 知乎 编辑:程序博客网 时间:2024/05/29 04:04
class Stringg{public:    Stringg(const char *str = NULL);    Stringg(const Stringg &other);    ~Stringg();    Stringg & operator = (const Stringg& other);private:    char *m_data;};Stringg::Stringg(const char *str){    if (str == NULL)    {        m_data = new char[1];        m_data = '\0';    }    else    {        int len = strlen(str);        m_data = new char[len+1];        strcpy(m_data, str);    }}Stringg::Stringg(const Stringg &other){    int len = strlen(other.m_data);    m_data = new char[len+1];    strcpy(m_data, other.m_data);}Stringg::~Stringg(){    delete[] m_data;}Stringg & Stringg::operator = (const Stringg &other){    if (this == &other)        return *this;    delete[] m_data;    int len = strlen(other.m_data);    m_data = new char[len+1];    strcpy(m_data, other.m_data);    return *this;}

strcpy的实现:

char* strcopy(char* strDest, char* strSrc){    if (strDest == NULL && strSrc == NULL)        return 0;    char* to = strDest;    while((*strDest++ = *strSrc++) != '\0')    {        ;    }    return to;}

strcat的实现:

//将源字符串加const,表明其为输入参数 char *strcat(char *strDest, const char *strSrc) {     char *address = strDest; //该语句若放在assert之后,编译出错     assert((strDest != NULL) && (strSrc != NULL)); //对源地址和目的地址加非0断言     while(*strDest) //while(*strDest!=’\0’)的简化形式     {       //若使用while(*strDest++),则会出错,因为循环结束后strDest还会执行一次++,那么strDest将指向'\0'的下一个位置。所以要在循环体内++;因为要是*strDest最后指向该字符串的结束标志’\0’           strDest++;     }      while(*strDest++ = *strSrc++)     {          NULL; *p++等价于*(p++)。根据c语言的优先级。*与++的优先级同处在第二级别上。他们的优先级是一样的,又因为处在第二级别的优先级运算符是结合方向是从右到左,所以当出现*p++这样的表达式的时候,根据优先级别相同,并且结合方向是从右到左,所以就等价于*(p++)了。那么也就是,先将p指针移动到下个p指针所指向元素的地址的下一个地址,然后再对那个地址取值。(*p)++是取p所指向地址的值,然后再将这个值+1        }     return address;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 oppo手机安装包损坏怎么办 手机安装包损坏无法安装怎么办 手机qq安装包损坏了怎么办 安装包损坏无法安装怎么办 方舟生存进化安装包损坏怎么办 如果安装包坏了怎么办 酷狗下载音乐收费怎么办 酷狗下载歌曲收费怎么办 酷狗音乐下载歌曲要钱怎么办 酷狗音乐下载要钱怎么办 手机酷狗音乐下载收费怎么办 咪咕视频静音了怎么办 卡西欧自拍神器死机了怎么办 手机一自拍就死机怎么办 微信怎么黑屏了怎么办 宝宝睡袋买大了怎么办 社保中间断了一年怎么办 京东阅读换手机怎么办 酷狗自动续费怎么办 qq音乐下载需要钱怎么办 电脑播放音乐没声音怎么办 酷狗账号注销了怎么办 电脑酷狗音乐没有声音怎么办 百度云的视频被净网怎么办 v380用户名或密码错误怎么办 课堂派没签到的怎么办 微信加密忘记了怎么办 视频容量太大上传不了视频怎么办 小米手机打不开主页面怎么办 qq离线文件过期了怎么办 百度云有转存任务正在进行怎么办 港版索尼手机的浏览器怎么办 手机下载文件不能直接打开怎么办 上传到电脑视频打不开了怎么办 百度云播放很卡怎么办 百度云视频很卡怎么办 考虫课程过期了怎么办 私教课程过期了怎么办 在异地交的社保怎么办 1岁宝宝吃粉笔怎么办 宝宝吃了彩色笔怎么办