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

查询网站有哪些导入链接及数量个人网站首页模板

查询网站有哪些导入链接及数量,个人网站首页模板,无锡网站制作哪家价格便宜,网站 改版 方案目录 基本思路 代码实现 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://www.yayakq.cn/news/162420/

相关文章:

  • 青岛 机械 中企动力提供网站建设网络组建设计与方案
  • 网上购物网站开发英文文献计算机专业大学排名
  • 机械英语网站简单响应式网站
  • 房地产网站建设提案个人如何做网络推广
  • 烟台网站开发多少钱wordpress evolve
  • 网站推广方案计划书门户网站微信服务号建设
  • 福州网站制作怎样网站开发项目分析模板
  • 网站开发毕设需求分析应用frontpage制作教学网站
  • 得力企业网站建设湖北省住房和建设厅网站
  • 哪些网站做装修女孩学网站开发和动漫设计
  • 济南城乡建设官方网站wordpress 國内加速
  • 网站开发项目进度安排前端开发是做什么
  • 网站备案 注意wordpress银联插件
  • 网站设计研究方法住房和城乡建设部网站城市稽查
  • asp网站连接数据库wordpress不同用户不同菜单
  • 许昌网站开发建设银行网站最近打不开吗
  • 网站设计人员爱南宁app
  • wordpress 软件公司主题怎么把网站排名优化
  • 浙江住房和建设网站设计网站公司哪里好
  • 南京外贸网站建设哪家好drupal做虚拟发货网站
  • 全国企业信用信息公示系统网站电子商务网站推广实训报告
  • 网站建设推广唯心磁遁8晋城网站建设科技有限公司
  • 直播网站怎么做的app软件开发摄像头
  • 如何做网站创业成品在线网站免费入口
  • 如何找到网站管理员北京矿建建设集团有限公司网站
  • 网站开发为什么需要域名天津网页制作设计营销
  • 移动网站公司官网优化
  • 视频制作网站素材如何推广产品
  • 织梦 网站版权信息山东省住房和城乡建设局网站首页
  • 网站建设规划大纲给传销做网站什么罪