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

专门做app的网站创业网项目招商

专门做app的网站,创业网项目招商,佛山企业网站排名优化,二维码在线生成制作往期回顾 String类的使用(续) String类(续) String类(初识) C std::string简要总结 1. 基本介绍 std::string 是 C 标准库提供的字符串类,封装了字符数组,支持动态大小管理。 具备…

往期回顾

         String类的使用(续)  

         String类(续)

         String类(初识)


C++ std::string简要总结

        1. 基本介绍

  • std::string 是 C++ 标准库提供的字符串类,封装了字符数组,支持动态大小管理。

  • 具备安全性和便捷性,替代了传统的 C 风格字符串(char*)。


         2. 构造函数

        默认构造:创建空字符串。

  • 从 C 字符串构造。

  • 拷贝构造。

  • 指定字符和个数构造。

  • 迭代器范围构造。


        3. 基本属性

  • size() / length():返回字符串长度。

  • capacity():当前分配的容量。

  • empty():判断是否为空。


        4. 内存管理

  • reserve(size_t):预留容量,减少扩容次数,不改变长度。

  • resize(size_t):改变长度,扩展时填充字符,缩短时截断。

  • 支持动态增长和释放。


        5. 访问字符

  • operator[]:无边界检查,访问字符。

  • at():带边界检查,安全访问。

  • 迭代器:begin(), end(), cbegin(), cend()。

  • 反向迭代器:rbegin(), rend()。


        6. 字符串操作

  • 追加:append(), +=, push_back()。

  • 插入:insert()。

  • 删除:erase()。

  • 替换:replace()。

  • 查找:find(), rfind(), find_first_of(), find_last_of(), find_first_not_of(), find_last_not_of()。

  • 子串:substr()。

  • 比较:compare()。


        7. 字符串与 C 字符串转换

  • c_str():返回以 \0 结尾的 C 字符串。

  • data():返回字符串内部数据指针(C++17 及之后等价于 c_str())。


        8. 运算符支持

  • 拼接:+, +=。

  • 比较:==, !=, <, > 等。


        9. 性能和安全

  • 拷贝是深拷贝,确保对象独立。

  • C++11 起支持移动语义,提升性能。

  • 动态管理内存,避免手动管理。


总结:

        std::string 提供了强大且方便的字符串操作功能,封装了底层字符数组的复杂性,安全且高效,是 C++ 字符串操作的首选工具


C++string类的自实现

        一、string类的自定义

1、需要使用到的头文件内容

#include<iostream>
using namespace std; 
#include<assert.h>
#include<string.h>

2、自定义string类的成员变量

namespace your_namespace{class string{        private:char* _str;size_t _size;size_t _capacity;static size_t npos;};
}

3、自定义的构造,拷贝构造,析构函数


string(const char* str = "",size_t size = 0,size_t capacity = 10) //两个构造函数
:_str(new char[capacity])
{if(capacity<(strlen(str)+1)){_str = new char[strlen(str)+1];_capacity = strlen(str);}else{_str = new char[capacity];_capacity = capacity;}_size = strlen(str);strcpy(_str,str);
}
~string(){delete [] _str;_str = nullptr;_capacity = 0;_size = 0;
string(const string& str){_str = new char[strlen(str._str)+1];_capacity = str._capacity;_size = str._size;strcpy(_str,str._str);
}

4、基本属性函数

  • size() / length():返回字符串长度。

  • capacity():当前分配的容量。

  • empty():判断是否为空。

size_t size() const{return _size;
}
size_t capacity() const {return _capacity;
}bool isempty(){if(_size != 0){return false;}return true;
}

5、内存管理函数

  • reserve(size_t):预留容量,减少扩容次数,不改变长度。

  • resize(size_t):改变长度,扩展时填充字符,缩短时截断。

void reserve(size_t n){assert(n > _capacity);char* new_str = new char[n+1];strcpy(new_str,_str);delete[] _str;_str = new_str;_capacity = n;
};
void resize(size_t size,char ch = '\0'){if(size < _size){_str[size] = '\0';}else{if(size > _capacity){reserve(size);}for(size_t i = _size ;i < size; i++){_str[i] = ch;}_str[size] = '\0';}_size = size;
}

        6. 字符串操作函数

  • 追加:append(), +=, push_back()。

  • 插入:insert()。

  • 删除:erase()。

  • 替换:replace()。

  • 查找:find(), 

  • 子串:substr()。

  • 比较:compare()。

void push_back(char ch){if(_size == _capacity){size_t new_capacity = 2*_capacity;reserve(new_capacity);}_str[_size] = ch;++_size;_str[_size] = '\0';
}
void append(const char* str){size_t len = strlen(str);// while (len+_size > _capacity)// {//     _capacity *= 2;// }if(len+_size > _capacity){_capacity = len+_size;}reserve(_capacity);// strcat(newstr,_str);// strcat(newstr,str);strcpy(_str+_size,str);_size += len;
};
void Delete(){if(_size == 0){cout<< "void string!"<<endl;return;}_size --;
}string& insert(size_t pos, char ch){assert(pos<_size);if(_size == _capacity){reserve(2*_capacity);}int end = _size;while(end >= pos){_str[end+1] = _str[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);}int end = _size;while (end >= pos){_str[end+len] = _str[end];end--;};strncpy(_str+pos,str,len);_size += len;return *this;
}
string& erase(size_t pos, size_t len = npos){assert(pos<_size);if(pos+len >= _size){_size = pos;_str[_size] = '\0';}else{int res = _size - len - pos;size_t end = _size;while (res >= 0){_str[pos+res] = _str[end--];res--;}_size = _size-len;}return *this;
}
string& operator+=(char ch){this->push_back(ch);return *this;
}
string& operator+=(const char * str){this->append(str);return *this;
}
size_t find(char ch, size_t pos = 0){assert(pos >= 0 && pos<_size);while (pos < _size){if(_str[pos] == ch){return pos;}pos ++;}return npos;
}
size_t find(const char* str, size_t pos = 0){assert(pos<_size);// if(pos + len > _size){//     return npos;// }// for(size_t begin = pos; begin <=_size-len;begin++){//     size_t i = 0;//     while ( i < len && _str[begin+i] == str[i])//     {//         ++i;//     }//     if(i == len){//         return begin;//     }// }// return npos;char* ps = strstr(_str+pos,str);if(!ps){return npos;}else{return ps -_str;}
}

        7. c_str()函数

c_str():返回以 \0 结尾的 C 字符串。


char* c_str(){char* str = new char[_size];strcpy(str, _str);return str;
}

        8、运算符支持

  • 拼接:+, +=。

  • 比较:==, !=, <, > 等。

string& operator=  (const string& str){if(&str == this){return *this;}delete [] _str;if(str._str){_str = new char[strlen(str._str)+1];strcpy(_str,str._str);}else{_str = nullptr;}_capacity = str._capacity;_size = str._size;return *this;
}
string& operator+=(char ch){this->push_back(ch);return *this;
}
string& operator+=(const char * str){this->append(str);return *this;
}
char& operator[](size_t i){assert(i<_size);return _str[i];
}
const char& operator[](size_t i) const{assert(i<_size);return _str[i];
}
bool operator<(const string& s){int ret = strcmp(_str,s._str);return ret<0;
}
bool operator>(const string& s){int ret = strcmp(_str,s._str);return ret > 0;
}
bool operator==(const string& s){int ret = strcmp(_str,s._str);return ret == 0;
}
bool operator<=(const string& s){return !(*this > s);
}
bool operator!=(const string& s){return !(*this == s);
}
bool operator>=(const string& s){return !(*this < s);
}

主函数测试:

        大家可以自己去测试,这里我就不进行测试了。

http://www.dtcms.com/a/495656.html

相关文章:

  • 多场景水质监测:守护水安全的技术防线
  • 免费网站排名优化在线html网站模板怎么用
  • oracle:NOT IN
  • 【入门级-算法-4、算法策略:前缀和】
  • 在NVIDIA Jetson Orin NX (Ubuntu 22.04, JetPack 5.1, CUDA 11 cuDnn8) 上安装PyTorch 2
  • 权重2的网站网址大全免费网站
  • 上海开发网站寻找五屏网站建设
  • 写好 React useEffect 的终极指南
  • 「日拱一码」121 多组学因素分析MOFA
  • Bootstrap 多媒体对象
  • 茶叶网站规划河南省建设工程招标投标协会网站
  • Bootstrap 输入框组
  • 做国内电影网站赚钱不一个空间能放几个网站
  • 带高度多边形,生成3D建筑模型,支持多种颜色或纹理的OBJ、GLTF、3DTiles格式
  • JSP 自定义标签
  • 高效压缩 PDF 文件大小(3 大实用的 Python 库)
  • yum安装的一些问题
  • 网站建设需要的资料库存管理
  • LangChain PromptTemplate 全解析:从模板化提示到智能链构
  • debug - MCUXpresso - 将NXP工程编译过程的所有命令行参数找出来
  • 基于MATLAB的多棵树分类器(随机森林)
  • 瑞芯微RK3588平台FFmpeg硬件编解码移植及性能测试实战攻略
  • 外贸做企业什么网站wordpress在线计算程序
  • 开发个网站开票名称是什么网站的策划分析
  • swift不同的语言环境使用不同的AppName,CFBundleDisplayName
  • php建站程序合肥网站建设讯息
  • 创建网站需要准备哪些资料广汉网站建设ghxhwl
  • SD comfy:教程1
  • 第三十六篇|东方国际学院的教育数据建模实践:首都圈日本语学校的费用结构、生源分布与治理参数分析
  • 保障数据采集稳定性:设计针对淘宝 API 的熔断、降级与重试机制