当前位置:首页 » 《关于电脑》 » 正文

C++初阶学习第七弹——string的模拟实现

13 人参与  2024年11月11日 13:22  分类 : 《关于电脑》  评论

点击全文阅读


C++初阶学习第六弹------标准库中的string类_c语言返回string-CSDN博客 

通过上篇我们已经学习到了string类的基本使用,这里我们就试着模拟实现一些,我们主要实现一些常用到的函数。

 

目录

 

一、string类的构造

 二、string类的拷贝构造

三、string类的析构函数

四.基本的函数实现

1.reserve的函数实现

 2.find函数的实现

 3.push_back函数的实现

4.insert函数的实现


一、string类的构造

//为了区分标准库,我们用Stringclass String{public:    String(const char* str = "")    {        if (str == nullptr)        {            assert(false);            return;        }        _str = new char[strlen(str) + 1];        strcpy(_str, str);    }    void String_print()    {        cout << _str << endl;    }private:    char* _str;};int main(){    String s1("abc");    s1.String_print();    return 0;}

有一个点要注意的是在给默认参数的时候不要给"\0"或者是空格。

 二、string类的拷贝构造

class String{public:    String(const char* str = "")    {        if (str == nullptr)        {            assert(false);            return;        }        _str = new char[strlen(str) + 1];        strcpy(_str, str);    }    String(const String& s)        : _str(new char[strlen(s._str) + 1])    {        strcpy(_str, s._str);    }    void String_print()    {        cout << _str << endl;    }private:    char* _str;};int main(){    String s1("abc");    s1.String_print();    String s2(s1);    s2.String_print();    return 0;}

三、string类的析构函数

由于string类对象不管以哪个方式创建时,都需要用new来开辟空间,所以string的析构函数写法为:

   ~string(){if (_str){delete[]_str;_str = nullptr;_size = _capacity = 0;}}

四.基本的函数实现

1.reserve的函数实现

void string::reserve(size_t n){if (n > _capacity){char*ret = new char[n + 1];strcpy(ret, _str);_str = ret;_capacity = n + 1;}}

 2.find函数的实现

size_t string::find(char ch, size_t pos){assert(pos < _size);for (size_t i = pos; pos < _size; i++){if (_str[i] == ch){return i;}}return npos;}

 3.push_back函数的实现

void string::push_back(char ch){if (_size == _capacity){reserve(_capacity == 0 ? 4 : _capacity * 2);}_str[_size] = ch;_size++;_str[_size] = '\0';}

4.insert函数的实现

void string::insert(size_t pos, char ch){assert(pos <= _size);if (_size == _capacity){reserve(_capacity == 0 ? 4 : _capacity * 2);}int end = _size + 1;while (end > pos){_str[end] = _str[end - 1];end--;}_str[end] = ch;_size++;}


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/184575.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 好看的秦依冉厉泽谦_秦依冉厉泽谦
  • 是图图的拥有牡丹命格的我嫁给五皇子,抛弃我的太子谢怀川,余思思,楼心月全书在线
  • 全文老婆成***后,王牌拆弹专家(张凯,张振华,林蕴)列表_全文老婆成***后,王牌拆弹专家
  • 逼我下乡?我闪婚嫁军官带娃暴富苏冉冉刘翠芬周牧深完本_逼我下乡?我闪婚嫁军官带娃暴富(苏冉冉刘翠芬周牧深)
  • 童养夫为了白月光想虐我?没关系我还有九个(崔清乐顾北寒)_童养夫为了白月光想虐我?没关系我还有九个(崔清乐顾北寒)
  • 代管班费小荷包三年后,青梅说我吞了180万(乔宇宁雨)全书免费_(乔宇宁雨)代管班费小荷包三年后,青梅说我吞了180万后续(乔宇宁雨)
  • 男友一家要我守规矩后,却悔疯了苏然完本_男友一家要我守规矩后,却悔疯了(苏然)
  • 重生打脸渣男毒闺蜜(陈亮张倩)全书免费_(陈亮张倩)重生打脸渣男毒闺蜜后续(陈亮张倩)
  • 全文和宗门断情绝义后,小可怜被大佬团宠了创作编写(江寻柳青青)列表_全文和宗门断情绝义后,小可怜被大佬团宠了创作编写
  • 和宗门断情绝义后,小可怜被大佬团宠了创作编写江寻柳青青完本_和宗门断情绝义后,小可怜被大佬团宠了创作编写(江寻柳青青)
  • 向导坐牢后,结果把狱友驯成忠犬桑虞陆擢完本_向导坐牢后,结果把狱友驯成忠犬(桑虞陆擢)
  • 姑姑爱开玩笑,藏我的录取通知书夏知妤_姑姑爱开玩笑,藏我的录取通知书夏知妤

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1