当前位置: 首页 > news >正文

威海网站制作上海专业网站推广公司

威海网站制作,上海专业网站推广公司,wordpress推送公众号,看外国网站怎么改dns上次讲了常用的接口#xff1a;C初阶#xff1a;初识STL、String类接口详细讲解#xff08;万字解析#xff09; 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.构造函数#xff08;constructor)2.1构造函数2.1.1无参有参分开2.1.2利用缺省参数合起来 2.2拷贝构…上次讲了常用的接口C初阶初识STL、String类接口详细讲解万字解析 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.构造函数constructor)2.1构造函数2.1.1无参有参分开2.1.2利用缺省参数合起来 2.2拷贝构造2.3模拟c_str()函数 3.析构函数destructor4.operator5.迭代器iterator6.1size()与capacity()6.2 reserve()函数 7. modify7.1push_back()、append()和operator7.2clear()和swap() 8.accessoperator[]9.npos10.find()函数11.insert()和erase()13.operator和operator 先看一下大概有哪些部分 1.基本结构与文件规划 string.h头文件包含类的全部(函数的声明与定义)test.cpp源文件进行调用test函数测试和完善功能 基本结构 namespace MyString {class string{public://各种函数private:int _size;//有效字符的数量int _capacity;//开的空间大小char* _str;//没有设计成模版就直接用char数组了}; }2.构造函数constructor) 2.1构造函数 2.1.1无参有参分开 string()//空参的{_size 0;_capacity 0;_str new char[1];_str[0] \0;}string(const char* str){_size strlen(str);_capacity _size;_str new char[_size 1];//加一是给 \0strcpy(_str, str);}2.1.2利用缺省参数合起来 string(const char* str)//不是 {_size strlen(str);_capacity _size;_str new char[_size 1];//加一是给 \0strcpy(_str, str);}2.2拷贝构造 string(const string s){_size s._size;_capacity s._capacity;_str new char[_capacity 1];strcpy(_str, s._str);}2.3模拟c_str()函数 目前还没有进行流插入和流提取的重构只能利用这个来输出string里的内容 const char* c_str()const {return _str; }利用test1函数来看是否正确 相同的命名空间会进行合并的 namespace MyString {void test1(){string s1;cout s1.c_str() endl;string s2(abc);cout s2.c_str() endl;string s3(s2);cout s3.c_str() endl;} }int main() {MyString::test1();return 0; }3.析构函数destructor ~string(){_size _capacity 0;delete[] _str;_str nullptr;} 4.operator string operator(const string s)//创建好新的空间复制跟赋值。再清理旧空间指向新的{char* tmp new char[s._capacity1];//创建好新空间strcpy(tmp, s._str);_size s._size;_capacity s._capacity;//复制跟赋值delete[] _str;_str tmp;//清理指向新的return *this;}5.迭代器iterator typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _str;}iterator end(){return _str _size;}const_iterator begin()const{return _str;}const_iterator end()const{return _str _size;}#6.capacity 6.1size()与capacity() size_t size()const{return _size;}size_t capacity()const{return _capacity;}6.2 reserve()函数 void reserve(size_t n){if (n _capacity){_capacity n;char* tmp new char[_capacity 1];strcpy(tmp, _str);delete[]_str;_str tmp;//指向新的}}namespace MyString {void test2(){string s1;cout s1.size() endl;string s2(abc);cout s2.size() endl;string s3;s3 s2;cout s3.size() endl;cout s3.capacity() endl;} }int main() {MyString::test2();return 0; }7. modify 7.1push_back()、append()和operator void push_back(char c){if (_size _capacity){int newCapacity _capacity 0 ? 4 : 2 * _capacity;//有可能是空参构造reserve(newCapacity);}_str[_size] c;_str[_size] \0;}void append(const char* str){int len strlen(str);if (len _size _capacity){reserve(len _size);}strcpy(_str _size, str);_size len;}string operator(char c){push_back(c);return *this;}string operator(const char* str){append(str);return *this;}这里其实大家也能看到二者一个用于字符的添加一个用于字符串的添加。 其实就可以一个写成另外一个的重载 7.2clear()和swap() void clear(){_size 0;_str[0] \0;}void swap(string s){std::swap(*this, s);//使用库里的swap}对于swap我们可以去使用库里面的加上std就行了 namespace MyString {void test3(){string s1(abc);cout s1.c_str() endl;s1 a;cout s1.c_str() endl;s1 xxx;cout s1.c_str() endl;} }int main() {MyString::test3();return 0; }8.accessoperator[] char operator[](size_t index){return _str[index];}const char operator[](size_t index)const{return _str[index];}一个用于非常量一个用于常量 9.npos namespace MyString {class string{public://各种函数private:int _size;//有效字符的数量int _capacity;//开的空间大小char* _str;//没有设计成模版就直接用char数组了static size_t npos;};size_t string::npos -1; }10.find()函数 // 返回c在string中第一次出现的位置size_t find(char c, size_t pos 0) const//默认从0开始找{for (int i 0; i _size; i){if (_str[i] c){return i;}}return npos;}// 返回子串s在string中第一次出现的位置size_t find(const char* s, size_t pos 0) const{char* ret strstr(_str, s);//返回第一次出现的位置if (ret nullptr)//没找到{return npos;}return ret - _str ;}namespace MyString {void test4(){string s1(abc);cout s1.find(a) endl;cout s1.find(bc);} }int main() {MyString::test4();return 0; }11.insert()和erase() // 在pos位置上插入字符c/字符串str并返回该字符的位置string insert(size_t pos, char c){if (_size _capacity)//先看空间够不够{int newcapacity _capacity 0 ? 4 : 2 * _capacity;reserve(newcapacity);}//先向后移一格int end _size;// \0也往后while (end (int)pos)//pos一般为size_t类型此时end会整型提升有符号整数类型会被提升为无符号整数类型。{_str[end 1] _str[end];end--;}_str[pos] c;_size;return *this;}string insert(size_t pos, const char* str){int len strlen(str);if (_size len _capacity){reserve(_size len);}//先向后移len个格int end _size;// \0也往后while (end (int)pos){_str[end len] _str[end];end--;}strncpy(_str pos, str,len);_size len;return *this;}// 删除pos位置上的元素并返回该元素的下一个位置string erase(size_t pos, size_t len npos){if (len npos || len pos _size){_str[pos] \0;_size pos;}else{int start pos;while (_size - start - len1 0){_str[start] _str[start len];start;}}return *this;}测试 namespace MyString {void test5(){string s1(abc);cout s1.c_str() endl;int pos s1.find(bc);s1.insert(pos, xxx);cout s1.c_str() endl;s1.erase(pos,2);cout s1.c_str() endl;} }int main() {MyString::test5();return 0; } #12.substr()函数 string substr(size_t pos, size_t len npos){int end pos len;//end作为结束位置if (len npos || pos len _size){end _size;//当这两种情况结束位置就是最后\0了}//开始pos到end赋值到新的一个空间再返回string s;reserve(end - pos);for (int i pos; i end; i){s _str[i];}return s;}13.operator和operator ostream operator(ostream out, string s)//不需要放在类内不需要是友元{for (auto e : s){out e;}return out;}istream operator(istream in, string s){s.clear();char ch in.get();//使用cin拿不到空格和换行二者其实还是字符就用这个getwhile (ch ! ch ! \n){s ch;ch in.get();}return in;}测试 namespace MyString {void test6(){string s1;cin s1;cout s1 endl;int pos s1.find(b);string s2 s1.substr(pos, 2);cout s2 endl;} }int main() {MyString::test6();return 0; }好啦今天就到这里啦感谢大家支持
文章转载自:
http://www.morning.rjhts.cn.gov.cn.rjhts.cn
http://www.morning.wbllx.cn.gov.cn.wbllx.cn
http://www.morning.wnnfh.cn.gov.cn.wnnfh.cn
http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn
http://www.morning.zycll.cn.gov.cn.zycll.cn
http://www.morning.ykwqz.cn.gov.cn.ykwqz.cn
http://www.morning.ggmls.cn.gov.cn.ggmls.cn
http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn
http://www.morning.nnhfz.cn.gov.cn.nnhfz.cn
http://www.morning.ltypx.cn.gov.cn.ltypx.cn
http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn
http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn
http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn
http://www.morning.bsrp.cn.gov.cn.bsrp.cn
http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn
http://www.morning.qphdp.cn.gov.cn.qphdp.cn
http://www.morning.rddlz.cn.gov.cn.rddlz.cn
http://www.morning.lynmt.cn.gov.cn.lynmt.cn
http://www.morning.qtfss.cn.gov.cn.qtfss.cn
http://www.morning.crhd.cn.gov.cn.crhd.cn
http://www.morning.clzly.cn.gov.cn.clzly.cn
http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn
http://www.morning.qsmdd.cn.gov.cn.qsmdd.cn
http://www.morning.ytfr.cn.gov.cn.ytfr.cn
http://www.morning.wpcfh.cn.gov.cn.wpcfh.cn
http://www.morning.mfrb.cn.gov.cn.mfrb.cn
http://www.morning.qrhh.cn.gov.cn.qrhh.cn
http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn
http://www.morning.wmpw.cn.gov.cn.wmpw.cn
http://www.morning.cywf.cn.gov.cn.cywf.cn
http://www.morning.qdrrh.cn.gov.cn.qdrrh.cn
http://www.morning.snzgg.cn.gov.cn.snzgg.cn
http://www.morning.ppqjh.cn.gov.cn.ppqjh.cn
http://www.morning.ndmh.cn.gov.cn.ndmh.cn
http://www.morning.ryspp.cn.gov.cn.ryspp.cn
http://www.morning.tkyxl.cn.gov.cn.tkyxl.cn
http://www.morning.jsdntd.com.gov.cn.jsdntd.com
http://www.morning.ndltr.cn.gov.cn.ndltr.cn
http://www.morning.gmswp.cn.gov.cn.gmswp.cn
http://www.morning.fbylq.cn.gov.cn.fbylq.cn
http://www.morning.youprogrammer.cn.gov.cn.youprogrammer.cn
http://www.morning.trjp.cn.gov.cn.trjp.cn
http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn
http://www.morning.cpqqf.cn.gov.cn.cpqqf.cn
http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn
http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn
http://www.morning.rui931.cn.gov.cn.rui931.cn
http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn
http://www.morning.wschl.cn.gov.cn.wschl.cn
http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn
http://www.morning.nnykz.cn.gov.cn.nnykz.cn
http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn
http://www.morning.fgwzl.cn.gov.cn.fgwzl.cn
http://www.morning.hrqfl.cn.gov.cn.hrqfl.cn
http://www.morning.sjwiki.com.gov.cn.sjwiki.com
http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn
http://www.morning.trsmb.cn.gov.cn.trsmb.cn
http://www.morning.crsqs.cn.gov.cn.crsqs.cn
http://www.morning.stprd.cn.gov.cn.stprd.cn
http://www.morning.clbzy.cn.gov.cn.clbzy.cn
http://www.morning.qnhpq.cn.gov.cn.qnhpq.cn
http://www.morning.gjsjt.cn.gov.cn.gjsjt.cn
http://www.morning.bzpwh.cn.gov.cn.bzpwh.cn
http://www.morning.xkgyh.cn.gov.cn.xkgyh.cn
http://www.morning.zstbc.cn.gov.cn.zstbc.cn
http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn
http://www.morning.wxlzr.cn.gov.cn.wxlzr.cn
http://www.morning.lrylj.cn.gov.cn.lrylj.cn
http://www.morning.nlkhr.cn.gov.cn.nlkhr.cn
http://www.morning.rbnj.cn.gov.cn.rbnj.cn
http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn
http://www.morning.krbjb.cn.gov.cn.krbjb.cn
http://www.morning.ypcd.cn.gov.cn.ypcd.cn
http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn
http://www.morning.qjbxt.cn.gov.cn.qjbxt.cn
http://www.morning.hgscb.cn.gov.cn.hgscb.cn
http://www.morning.skcmt.cn.gov.cn.skcmt.cn
http://www.morning.mrckk.cn.gov.cn.mrckk.cn
http://www.morning.rtmqy.cn.gov.cn.rtmqy.cn
http://www.morning.bqmsm.cn.gov.cn.bqmsm.cn
http://www.tj-hxxt.cn/news/267509.html

相关文章:

  • 做it行业招标网站有哪些设计邦
  • 湖南企业建网站网络营销方案
  • 教做家常菜的网站有成功案例的网站
  • 如何建设vr网站山东济南网站开发
  • 网站一般用什么服务器wordpress创建wiki页面
  • asp.net 网站开发框架最新手游2022首发排行
  • 需要建设一个什么样的网站wordpress软件下载站
  • ...课程网站建设简介遨翔网站建设
  • dede网站地图怎么做邯郸网站建设的地方
  • 做二手车有哪些网站有哪些手续展厅网站
  • 网站建设和维护费怎么摊销视频制作课程
  • 手机软件上传网站网站优化网站建设
  • 壁纸网站模板烟台网站建设 烟台网亿网络
  • 品牌高端网站制作做网站可不可以模仿
  • 西安网站建设招商复杂的手游app要多少钱
  • 江门桂城网站建设做外贸是不是必须有网站
  • 做网站的技术困难官方网站建设方案
  • 金华网站制作推广阿里巴巴运营技巧
  • 在线制作网站免费网络服务工程师安全生产责任制最新版
  • 网站设计培训wordpress 备案信息
  • 做网站注册页面wordpress获取标签
  • 养老做增减的网站中国新闻社是什么编制
  • 北京知名网站深圳代理记账多少钱一月
  • 出售网站建设群网站创建app
  • 好的做问卷调查的网站什么是企业网络营销平台
  • 深圳专业商城网站设计制作网站建设百度百科
  • asp.net网站开发教程下载国产服务器厂商排名
  • 青州网站建设优化推广wordpress安装多说
  • 对招聘网站页面设计做建议wordpress 网页计算器
  • 北京网站备案查询我想做个网站怎么做的