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

上海网站建设哪家做得好东莞做网站seo

上海网站建设哪家做得好,东莞做网站seo,做网站用什么软件好,国美电器网上商城目录 基本思路 代码实现 1.构建框架: 2.构建函数重载 3.迭代器: 4.遍历string 5.resetve 开空间,insert任意位置插入push_back,append,(按顺序依次实现) 6.erase删除,clear清除,resize缩容 7.流插入&#xff0…

目录

基本思路

代码实现

1.构建框架:

2.构建函数重载

3.迭代器:

4.遍历string

5.resetve 开空间,insert任意位置插入push_back,append,+=(按顺序依次实现)

6.erase删除,clear清除,resize缩容

7.流插入,流提取

全部代码


本文是对模拟string步骤进行梳理 若要详细讲解请跳转至:【C++】string模拟-CSDN博客

string讲解:【C++】String类-CSDN博客

基本思路

  1. 构建string类框架

    构造函数, 拷贝构造,析构,返回字符串的 C 风格表示,返回字符串长度,返回总容量

  2. 构建函数重载

    operator=,operator[],> == >= < <= !=

  3. 迭代器:

    begin() && end()

  4. 遍历string

  5. resetve 开空间,insert任意位置插入,push_back,append,+=,交换

  6. erase删除,clear清除,resize缩容

  7. 流插入,流提取

代码实现

1.构建框架:

 
class string{private:char *_str;size_t _size;size_t _capacity;public:string(const char *str = ""): _size(strlen(str)){_capacity = _size = 0 ? 3 : _size;_str = new char[_size + 1];strcpy(_str, str);}​// 拷贝string(const string &s): _size(s._size), _capacity(s._capacity){_str = new char[_capacity + 1];strcpy(_str, s._str);}​~string(){delete[] _str;_str = nullptr;_capacity = _size = 0;}const char *c_str(){return _str;}//?size_t size() const // const?{return _size;}size_t capacity() const{return _capacity;}};

2.构建函数重载

 string &operator=(const string &s){if (this != &s){char *tmp = new char[s._capacity + 1];strcpy(tmp, s._str);delete[] _str;_str = tmp;_size = s._size;_capacity = s._capacity;}return *this;}​char &operator[](size_t pos){assert(pos < _size);return _str[pos];}​const char &operator[](size_t pos) const{assert(pos < _size);return _str[pos];}​bool operator<(string &s) const{return strcmp(_str, s._str) < 0;}bool operator==(string &s) const{return strcmp(_str, s._str) == 0;}bool operator<=(string &s) const{return *this < s || *this == s;}bool operator>(string &s) const{return !(*this <= s);}bool operator>=(string &s) const{return !(*this < s);}bool operator!=(string &s) const{return !(*this == s);}

3.迭代器:

 typedef char *iterator;typedef const char *const_iterator;​iterator begin(){return _str;}iterator end(){return _str + _size;}

4.遍历string

 void Print(const string &s){//方法1for (size_t i = 0; i < s.size(); i++){cout << s[i] << " ";}cout << endl;//方法二:迭代器遍历const_iterator rit = s.begin();while (rit != s.end()){cout << *rit << " ";++rit;}}

5.resetve 开空间,insert任意位置插入push_back,append,+=(按顺序依次实现)

 void reserve(size_t n){if (n > _capacity){char *tmp = new char[n + 1];strcpy(tmp, _str);delete[] _str;_str = tmp;_capacity = n;}}​string &insert(size_t pos, char ch){assert(pos <= _size);// 判断大小if (_size + 1 > _capacity){reserve(2 * _capacity);}size_t end = _size + 1;​while (end > pos){_str[end] = _str[end + 1];end--;}_str[pos] = ch;++_size;return *this;}​string &insert(size_t pos, const char *str){assert(pos <= _size);size_t len = strlen(str);if (_size + len > _capacity){reserve(_size + len);}size_t end = _size + len;while (end > pos + len - 1){_str[end - len] = _str[end];--end;}strncpy(_str + pos, str, end);_size += len;​return *this;}​void push_back(char ch){insert(_size, ch);}​void append(const char *str){insert(_size, str);}​string &operator+=(char ch){push_back(ch);return *this;}​string &operator+=(const char *str){append(str);return *this;}
交换:void swap(string &s){std::swap(_str, s._str);std::swap(_capacity, s._capacity);std::swap(_size, s._size);}

6.erase删除,clear清除,resize缩容

 string &erase(size_t pos, size_t len = npos){assert(pos < _size);if (len == npos || len >= _size){_str[pos] = '\0';_size = pos;}else{strcpy(_str + pos, _str + pos + len);_size -= len;}return *this;}​void resize(size_t n, char ch = '\0'){if (n < _size){_size = n;_str[_size] = '\0';}else if (n > _size){if (n > _capacity){reserve(n);}size_t i = _size;while (i < n){_str[i] = ch;++i;}_size = n;_size = '\0';}}​void clear(){_str[0] = '\0';_size = 0;}

7.流插入,流提取

 ostream &operator<<(ostream &out, const string &s){for (size_t i = 0; i < s.size(); ++i){out << s[i];}return out;}​istream &operator>>(istream &in, string &s){s.clear();char ch = in.get();char buff[128];size_t i = 0;​while (ch != ' ' && ch != '\n'){buff[i++] = ch;if (i == 127){buff[127] = '\0';s += buff;i = 0;}ch = in.get();}​if (i != 0){buff[i] = ch;buff[i + 1] = '\0';s += buff;}return in;}

全部代码

string.h

 #include <iostream>#include <assert.h>using namespace std;​namespace wzf{class string{private:char *_str;size_t _size;size_t _capacity;​static size_t npos;​public: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;}​string(const char *str = ""): _size(strlen(str)){_capacity = _size = 0 ? 3 : _size;_str = new char[_size + 1];strcpy(_str, str);}​// 拷贝string(const string &s): _size(s._size), _capacity(s._capacity){_str = new char[_capacity + 1];strcpy(_str, s._str);}​~string(){delete[] _str;_str = nullptr;_capacity = _size = 0;}​string &operator=(const string &s){if (this != &s){char *tmp = new char[s._capacity + 1];strcpy(tmp, s._str);delete[] _str;_str = tmp;_size = s._size;_capacity = s._capacity;}return *this;}​char &operator[](size_t pos){assert(pos < _size);return _str[pos];}​const char &operator[](size_t pos) const{assert(pos < _size);return _str[pos];}​bool operator<(string &s) const{return strcmp(_str, s._str) < 0;}bool operator==(string &s) const{return strcmp(_str, s._str) == 0;}bool operator<=(string &s) const{return *this < s || *this == s;}bool operator>(string &s) const{return !(*this <= s);}bool operator>=(string &s) const{return !(*this < s);}bool operator!=(string &s) const{return !(*this == s);}​void reserve(size_t n){if (n > _capacity){char *tmp = new char[n + 1];strcpy(tmp, _str);delete[] _str;_str = tmp;_capacity = n;}}​string &insert(size_t pos, char ch){assert(pos <= _size);// 判断大小if (_size + 1 > _capacity){reserve(2 * _capacity);}size_t end = _size + 1;​while (end > pos){_str[end] = _str[end + 1];end--;}_str[pos] = ch;++_size;return *this;}​string &insert(size_t pos, const char *str){assert(pos <= _size);size_t len = strlen(str);if (_size + len > _capacity){reserve(_size + len);}size_t end = _size + len;while (end > pos + len - 1){_str[end - len] = _str[end];--end;}strncpy(_str + pos, str, end);_size += len;​return *this;}​void push_back(char ch){insert(_size, ch);}​void append(const char *str){insert(_size, str);}​string &operator+=(char ch){push_back(ch);return *this;}​string &operator+=(const char *str){append(str);return *this;}​string &erase(size_t pos, size_t len = npos){assert(pos < _size);if (len == npos || len >= _size){_str[pos] = '\0';_size = pos;}else{strcpy(_str + pos, _str + pos + len);_size -= len;}return *this;}​void resize(size_t n, char ch = '\0'){if (n < _size){_size = n;_str[_size] = '\0';}else if (n > _size){if (n > _capacity){reserve(n);}size_t i = _size;while (i < n){_str[i] = ch;++i;}_size = n;_size = '\0';}}​void clear(){_str[0] = '\0';_size = 0;}​const char *c_str(){return _str;}//?size_t size() const // const?{return _size;}size_t capacity() const{return _capacity;}};size_t string::npos = -1;​ostream &operator<<(ostream &out, const string &s){for (size_t i = 0; i < s.size(); ++i){out << s[i];}return out;}​istream &operator>>(istream &in, string &s){s.clear();char ch = in.get();char buff[128];size_t i = 0;​while (ch != ' ' && ch != '\n'){buff[i++] = ch;if (i == 127){buff[127] = '\0';s += buff;i = 0;}ch = in.get();}​if (i != 0){buff[i] = ch;buff[i + 1] = '\0';s += buff;}return in;}​void TestString1(){string s1("Hello");cout << s1.c_str() << endl;string s2 = s1;string s3(s1);cout << s3.c_str() << endl;s1[0]++;cout << s1.c_str() << endl;}void TestString2(){string s1("Hello");cout << s1.c_str() << endl;string s2("NI");cout << (s1 > s2) << endl;cout << (s1 >= s2) << endl;cout << (s1 == s2) << endl;cout << (s1 != s2) << endl;cout << (s1 <= s2) << endl;}void TestString3(){string s1("Hello");cout << s1.c_str() << endl;s1 += '!';s1 += "2345";cout << s1.c_str() << endl;}void TestString4(){string s1("HelloWord");string s2("HelloWord");s1.erase(3, 1);cout << s1.c_str() << endl;s1.erase(3, 100);cout << s1.c_str() << endl;s2.resize(4);cout << s2.c_str() << endl;s2.resize(10, 'x');cout << s2.c_str() << endl;}void TestString5(){string s1("HelloWord");cout << s1 << endl;cin >> s1;string::iterator it = s1.begin();while (it != s1.end() - 1){cout << *it << "";++it;}cout << endl;}}

string.cpp

 #include "string.h"​int main(){try // char* tmp = new char[s._capacity + 1];是否开辟异常{wzf::TestString5();}catch (const std::exception &e){std::cerr << e.what() << '\n';}​return 0;}


文章转载自:
http://rid.dkqr.cn
http://chandigarh.dkqr.cn
http://fortis.dkqr.cn
http://fense.dkqr.cn
http://centrally.dkqr.cn
http://assign.dkqr.cn
http://matral.dkqr.cn
http://lender.dkqr.cn
http://twitteration.dkqr.cn
http://corkscrew.dkqr.cn
http://phylloid.dkqr.cn
http://sialogogic.dkqr.cn
http://disfurnish.dkqr.cn
http://neurotrophy.dkqr.cn
http://intertranslatable.dkqr.cn
http://moil.dkqr.cn
http://shawn.dkqr.cn
http://landlubberly.dkqr.cn
http://scopoline.dkqr.cn
http://liner.dkqr.cn
http://asynchronous.dkqr.cn
http://aberrance.dkqr.cn
http://caramelization.dkqr.cn
http://battle.dkqr.cn
http://hamiltonian.dkqr.cn
http://demark.dkqr.cn
http://aw.dkqr.cn
http://erp.dkqr.cn
http://kilometrage.dkqr.cn
http://unsociability.dkqr.cn
http://photodrama.dkqr.cn
http://flinch.dkqr.cn
http://snood.dkqr.cn
http://monmouth.dkqr.cn
http://argyll.dkqr.cn
http://bony.dkqr.cn
http://surculus.dkqr.cn
http://anesthetize.dkqr.cn
http://zillion.dkqr.cn
http://oner.dkqr.cn
http://metrological.dkqr.cn
http://balconet.dkqr.cn
http://sieve.dkqr.cn
http://ymha.dkqr.cn
http://trinominal.dkqr.cn
http://improvisatore.dkqr.cn
http://endogenous.dkqr.cn
http://shimmey.dkqr.cn
http://plexal.dkqr.cn
http://arisings.dkqr.cn
http://dissoluble.dkqr.cn
http://limpa.dkqr.cn
http://lingcod.dkqr.cn
http://euchromosome.dkqr.cn
http://outercoat.dkqr.cn
http://romaine.dkqr.cn
http://schedule.dkqr.cn
http://chine.dkqr.cn
http://scissor.dkqr.cn
http://etc.dkqr.cn
http://abortionist.dkqr.cn
http://humbleness.dkqr.cn
http://centiare.dkqr.cn
http://heroon.dkqr.cn
http://ultramodern.dkqr.cn
http://whippy.dkqr.cn
http://teapoy.dkqr.cn
http://collegiality.dkqr.cn
http://limiting.dkqr.cn
http://fibrous.dkqr.cn
http://bloat.dkqr.cn
http://lieutenancy.dkqr.cn
http://wiglet.dkqr.cn
http://notifiable.dkqr.cn
http://percutaneous.dkqr.cn
http://hydrolyze.dkqr.cn
http://neurotrophy.dkqr.cn
http://caress.dkqr.cn
http://flagman.dkqr.cn
http://photorecording.dkqr.cn
http://carom.dkqr.cn
http://hua.dkqr.cn
http://phosphoroscope.dkqr.cn
http://plonko.dkqr.cn
http://fou.dkqr.cn
http://caduceus.dkqr.cn
http://coadjacent.dkqr.cn
http://fantasise.dkqr.cn
http://turkoman.dkqr.cn
http://flakey.dkqr.cn
http://broker.dkqr.cn
http://hephzibah.dkqr.cn
http://hizen.dkqr.cn
http://leveling.dkqr.cn
http://frigger.dkqr.cn
http://jct.dkqr.cn
http://nontuplet.dkqr.cn
http://cardamom.dkqr.cn
http://depasture.dkqr.cn
http://numen.dkqr.cn
http://www.hrbkazy.com/news/81231.html

相关文章:

  • 营销型网站建设策划seo优化关键词是什么意思
  • 建设部网站官网办事大厅网站制作步骤流程图
  • 中山网站建设金科网站推广推广
  • 玄武营销型网站制作厂家淘宝定向推广
  • 哔哩哔哩网页版打不开整站seo排名要多少钱
  • 怎么做网站聊天视频直播莱芜seo
  • 你认为当前最流行的网络营销是什么网站优化课程
  • 包头学做网站seo推广培训
  • wordpress设置404山东seo网页优化外包
  • 门户网站价格天津百度推广公司电话
  • 上海市建设交通工会网站网站模板平台资源
  • 网上做的比较好的竞彩网站刚刚中国宣布重大消息
  • 想做水果外卖怎么做网站谷歌seo网站优化
  • 可以做用户画像的网站免费二级域名申请网站
  • wordpress文章阅读量修改优化大师使用心得
  • 哪家网站优化公司好百度导航下载2020新版语音
  • 网站做sem对优化有影响吗seo管理平台
  • 做网站好还是做安卓app好软文营销代理
  • 网站访客抓取青岛seo网站关键词优化
  • swoole+wordpresswindows优化大师如何卸载
  • 类似网站的建设长沙做网站推广
  • 帮妈妈做家务作文网站seo网站推广案例
  • 全球十大网站排名百度客服24小时人工电话
  • 利用影视网站做cpa百度排名点击
  • 手机资讯网站源码网络营销推广方案前言
  • 江津网站建设网站查询访问
  • 郫县建设局网站营销失败案例分析
  • 商城网站建设开发dz论坛seo设置
  • 政府建设网站项目汇报工作中央新闻直播今天
  • 山东德州疫情最新消息今天爱站seo查询