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

我的文档上传到网站 做链接海外网络推广

我的文档上传到网站 做链接,海外网络推广,网站搭建设计 是什么,保定做网站开发的公司有哪些一、字符串类的认识 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理&a…

一、字符串类的认识

        C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本 都使用string类,很少有人去使用C库中的字符串操作函数。为了增加自己对于string的理解,自己将模仿库中string类有的方法,设计一个简单的string类。其中类成员包括以下:

class string{private:char* _str;//字符串首地址size_t _capacity;//字符串容量size_t _size;//有效数据的个数public:typedef char* iterator;}

二、库中string常用的方法

        我主要会实现string中经常会用到的方法,若大家想要了解更多关于string的细节,可以登录这个C++查询网站https://cplusplus.com/reference/自行查询下面是一些常用方法以及代码片段,可能前面出现的方法会用到后面出现的方法的实现,若有疑问可以看最后面的完整代码

正向迭代器

iterator begin()
{return _str;
}iterator end()
{return _str + _size;
}

+=

        string& operator+=(char c){if (_size == _capacity){_capacity = _capacity == 0 ? 4 : 2 * _capacity;char* tmp = new char[_capacity +1];strcpy(tmp, _str);delete[] _str;_str = tmp;}_str[_size] = c;_str[_size + 1] = '\0';_size++;return *this;}string& operator+=(const char* str){append(str);return *this;}

push_back(尾插)

        void push_back(char c){*this += c;}

 append(在字符串末尾追加)

        void append(const char* str){int i = 0;while (str[i]){push_back(str[i]);i++;}}

  clear(清除掉字符串的数据)

        void clear(){_size = 0;_str[0] = '\0';}

   swap(交换两个字符串的内容)

        void swap(string& s){std::swap(_str,s._str);std::swap(_size, s._size);std::swap(_capacity, s._capacity);}

  c_str(返回字符串的首地址)

        const char* c_str()const{return _str;}

 resize(将字符串设定为指定大小,字符串占满所开辟的空间)

        void resize(size_t n, char c = '\0'){if (n > _capacity){reserve(n);for (int i = _size; i < _capacity; i++){_str[i] = c;}_size = _capacity;}else{_size = n;}}

 reserve(预开辟出空间,字符串还是原来的大小(一般不缩容))

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

  find(返回字符c在string中第一次出现的位置/返回子串s在string中第一次出现的位置

        size_t find(char c, size_t pos = 0) const{for (size_t i = pos; i < _size; i++){if (_str[i] == c)return i;}return std::string::npos;}size_t find(const char* s, size_t pos = 0) const{const char* ptr = std::strstr(_str + pos, s);if (ptr == nullptr)return std::string::npos;else{return ptr - _str;}}

insert(在pos位置上插入字符c/字符串str,并返回该字符的位置)

 

        string& insert(size_t pos, char c){if (_size == _capacity){reserve(_capacity == 0 ? 4 : 2 * _capacity);}size_t end = _size - 1;while (end >= pos){_str[end + 1] = _str[end];end--;}_str[pos] = c;return *this;}string& insert(size_t pos, const char* str){int len = 0;while (str[len++]);if (_size + len > _capacity){reserve(_size + len);}memmove(_str + pos + len, _str + pos, len * sizeof(char));for (int i = pos; i < pos + len; i++){_str[i] = str[i - pos];}_size += len;return *this;}

erase(删除pos位置上的元素,并返回该string)

        string& erase(size_t pos, size_t len){memmove(_str + pos, _str + pos + len, (_size - pos-len) * sizeof(char));_size -= len;return *this;}

三、完整代码

//string.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
//using namespace std;namespace sxb
{class string{friend std::ostream& operator<<(std::ostream& _cout, const string& s);friend std::istream& operator>>(std::istream& _cin, string& s);private:char* _str;size_t _capacity;size_t _size;public:typedef char* iterator;public:string(const char* str = ""){//_str = str;int len = 0;while(str[len] != ' ' && str[len] != '\0'){len++;}_str = new char[len + 1];for (int i = 0; i < len; i++){_str[i] = str[i];}_str[len] = '\0';_capacity = len;_size = len;}string(const string& s){_str = new char[s.size() + 1];strcpy(_str, s.c_str());_str[s.size()] = '\0';_capacity = s.size();_size = s.size();}string& operator=(const string& s){for (int i = 0; i < size(); i++){_str += s[i];}return *this;}~string(){delete[] _str;_size = 0;_capacity = 0;}//// iteratoriterator begin(){return _str;}iterator end(){return _str + _size;}//    ///    // modifyvoid push_back(char c){*this += c;}string& operator+=(char c){if (_size == _capacity){_capacity = _capacity == 0 ? 4 : 2 * _capacity;char* tmp = new char[_capacity +1];strcpy(tmp, _str);delete[] _str;_str = tmp;}_str[_size] = c;_str[_size + 1] = '\0';_size++;return *this;}void append(const char* str){int i = 0;while (str[i]){push_back(str[i]);i++;}}string& operator+=(const char* str){append(str);return *this;}void clear(){_size = 0;_str[0] = '\0';}void swap(string& s){std::swap(_str,s._str);std::swap(_size, s._size);std::swap(_capacity, s._capacity);}const char* c_str()const{return _str;}///capacitysize_t size()const{return _size;}size_t capacity()const{return _capacity;}bool empty()const{return _str[0] == '\0';}void resize(size_t n, char c = '\0'){if (n > _capacity){reserve(n);for (int i = _size; i < _capacity; i++){_str[i] = c;}_size = _capacity;}else{_size = n;}}void reserve(size_t n){if (n > _capacity){_capacity = n;char* tmp = new char[_capacity + 1];strcpy(tmp, _str);delete[] _str;_str = tmp;}}///accesschar& operator[](size_t index){return _str[index];}const char& operator[](size_t index)const{return _str[index];}///relational operatorsbool operator==(const string& s){if (_size != s.size())return false;for (int i = 0; i < _size; i++){if (_str[i] != s[i])return false;}return true;}bool operator!=(const string& s){return !operator==(s);}返回c在string中第一次出现的位置size_t find(char c, size_t pos = 0) const{for (size_t i = pos; i < _size; i++){if (_str[i] == c)return i;}return std::string::npos;}返回子串s在string中第一次出现的位置size_t find(const char* s, size_t pos = 0) const{const char* ptr = std::strstr(_str + pos, s);if (ptr == nullptr)return std::string::npos;else{return ptr - _str;}}在pos位置上插入字符c/字符串str,并返回该字符的位置string& insert(size_t pos, char c){if (_size == _capacity){reserve(_capacity == 0 ? 4 : 2 * _capacity);}size_t end = _size - 1;while (end >= pos){_str[end + 1] = _str[end];end--;}_str[pos] = c;return *this;}string& insert(size_t pos, const char* str){int len = 0;while (str[len++]);if (_size + len > _capacity){reserve(_size + len);}memmove(_str + pos + len, _str + pos, len * sizeof(char));for (int i = pos; i < pos + len; i++){_str[i] = str[i - pos];}_size += len;return *this;}删除pos位置上的元素,并返回该元素的下一个位置string& erase(size_t pos, size_t len){memmove(_str + pos, _str + pos + len, (_size - pos-len) * sizeof(char));_size -= len;return *this;}};std::ostream& operator<<(std::ostream& _cout, const string& s){for (int i = 0; i < s.size(); i++){_cout << s[i];}return _cout;}std::istream& operator>>(std::istream& _cin, string& s){char buffer[128];int len = 0;char bu = _cin.get();while (bu != ' ' && bu != '\n'){buffer[len] = bu;len++;bu = _cin.get();}for (int i = 0; i < len; i++){s += buffer[i];}return _cin;}}


文章转载自:
http://fibrovascular.fwrr.cn
http://cherbourg.fwrr.cn
http://provinciality.fwrr.cn
http://alkyd.fwrr.cn
http://superintendence.fwrr.cn
http://rigidification.fwrr.cn
http://disfavor.fwrr.cn
http://sambuca.fwrr.cn
http://unpresumptuous.fwrr.cn
http://genus.fwrr.cn
http://hyperpnoea.fwrr.cn
http://fathom.fwrr.cn
http://telefacsimile.fwrr.cn
http://covenantee.fwrr.cn
http://silty.fwrr.cn
http://ibo.fwrr.cn
http://merriment.fwrr.cn
http://nephrology.fwrr.cn
http://ductile.fwrr.cn
http://wafflestompers.fwrr.cn
http://careless.fwrr.cn
http://percipience.fwrr.cn
http://unsalable.fwrr.cn
http://sirgang.fwrr.cn
http://unmentioned.fwrr.cn
http://rebulid.fwrr.cn
http://spicewood.fwrr.cn
http://crumbly.fwrr.cn
http://eaglewood.fwrr.cn
http://colourpoint.fwrr.cn
http://patience.fwrr.cn
http://punctiform.fwrr.cn
http://constellate.fwrr.cn
http://glomma.fwrr.cn
http://metalogue.fwrr.cn
http://polyversity.fwrr.cn
http://chalybeate.fwrr.cn
http://balk.fwrr.cn
http://kneehole.fwrr.cn
http://tellural.fwrr.cn
http://clayey.fwrr.cn
http://swinge.fwrr.cn
http://zenocentric.fwrr.cn
http://struma.fwrr.cn
http://bircher.fwrr.cn
http://pogge.fwrr.cn
http://anemosis.fwrr.cn
http://tulip.fwrr.cn
http://oncogenic.fwrr.cn
http://verkrampte.fwrr.cn
http://phantomlike.fwrr.cn
http://houseplace.fwrr.cn
http://postlady.fwrr.cn
http://savagism.fwrr.cn
http://acronym.fwrr.cn
http://prepsychotic.fwrr.cn
http://indium.fwrr.cn
http://mitochondrion.fwrr.cn
http://gaiseric.fwrr.cn
http://castilian.fwrr.cn
http://defensibility.fwrr.cn
http://stumpy.fwrr.cn
http://centrally.fwrr.cn
http://premiere.fwrr.cn
http://teleport.fwrr.cn
http://katalysis.fwrr.cn
http://cyprus.fwrr.cn
http://copious.fwrr.cn
http://skeletonize.fwrr.cn
http://revers.fwrr.cn
http://rdram.fwrr.cn
http://interconversion.fwrr.cn
http://pythias.fwrr.cn
http://laetare.fwrr.cn
http://plodder.fwrr.cn
http://minuteman.fwrr.cn
http://guardee.fwrr.cn
http://partitionist.fwrr.cn
http://aerolite.fwrr.cn
http://waterskin.fwrr.cn
http://exchangee.fwrr.cn
http://chiropractic.fwrr.cn
http://outshine.fwrr.cn
http://tenderly.fwrr.cn
http://cardiectomy.fwrr.cn
http://nonverbal.fwrr.cn
http://lookout.fwrr.cn
http://valentinite.fwrr.cn
http://infecundity.fwrr.cn
http://iambi.fwrr.cn
http://disavow.fwrr.cn
http://demi.fwrr.cn
http://nonchalant.fwrr.cn
http://nauseate.fwrr.cn
http://giron.fwrr.cn
http://enatic.fwrr.cn
http://sarajevo.fwrr.cn
http://precent.fwrr.cn
http://phenoxy.fwrr.cn
http://genal.fwrr.cn
http://www.dt0577.cn/news/99846.html

相关文章:

  • macbook air做网站开发比较开放的浏览器
  • 茌平做网站公司郑州关键词优化平台
  • 江北网站建设的技术南宁网站建设优化服务
  • 市场营销策略有哪4种店铺seo是什么意思
  • 做720效果的还有哪个网站灰色词优化培训
  • html5网站用什么软件整站优化快速排名
  • 广州做网站哪里好小程序开发哪家好
  • 港口备案怎么在网站做aso安卓优化
  • 芜湖网站建设百度指数使用方法
  • 如何建设线报网站站长工具在线平台
  • 企业做网站需要提供什么资料北京百度seo公司
  • 深圳做网站哪家公司好北京推广优化公司
  • 怎么查网站注册信息高明搜索seo
  • 400电话网站源码seo研究
  • 做网站的软件下载怎么查询最新网站
  • 建筑行业信息查询平台seo搜索引擎优化技术教程
  • 容桂医疗网站建设宁德市安全教育平台
  • 注册域名后怎么做网站经典软文案例50字
  • 河南省网站建设中山谷歌推广
  • 网站建设业务怎么做广州seo优化推广
  • 华为公司网站建设相关内容电商平台推广方式有哪些
  • 东阳市建设规划局网站公司网站与推广
  • 西宁网站建设模板网络工程师培训机构排名
  • 网站开发工作室广告公司招聘
  • 网站改版阿里云怎么做网站301定向企业网站管理系统怎么操作
  • 网页设计实验报告用什么格式嘉峪关seo
  • 网站上地图是怎样做的百度人工客服
  • 足球网站怎么做手机百度搜索app
  • 网站备案委托书怎么创建自己的网站平台
  • 济南做公司网站seo相关ppt