
C++ string类函数使用详解
下载需积分: 50 | 12KB |
更新于2025-03-08
| 118 浏览量 | 举报
收藏
### C++ string 类讲解
C++中的string类是一个非常重要的类,它定义在<string>头文件中,属于C++标准模板库(STL)的一部分。string类极大地简化了对字符串的操作,使得字符串的处理变得更加安全和高效。本文档将详细讲解C++中string类的各项函数,内容充实且举例较多,旨在帮助读者深入理解和掌握string类的使用方法。
#### 1. string 类的基本概念
在C++中,string 类本质上是一个封装了字符数组的对象,提供了许多方便的字符串操作方法。它不仅包含基本的构造函数、赋值操作符等,还有大量的成员函数,用于执行各种字符串操作,如字符的追加、删除、查找、替换等。
#### 2. string 类的构造函数
string 类提供多种构造函数,用于创建不同状态的字符串对象:
- `string()`:默认构造函数,创建一个空的string对象。
- `string(size_t n, char c)`:创建一个包含n个字符c的字符串。
- `string(const char* s)`:使用C风格字符串s创建一个string对象。
- `string(const string& str)`:复制构造函数,复制一个string对象到另一个string对象。
- `string(const char* s, size_t n)`:创建一个字符串,包含指针s指向的数组的前n个字符。
- `string(const initializer_list<char>& il)`:使用初始化列表创建string对象。
#### 3. string 类的赋值操作
- `string& operator=(const char* s)`:将C风格字符串s赋值给string对象。
- `string& operator=(const string& str)`:将另一个string对象的内容赋值给string对象。
- `string& assign(const char* s)`:使用C风格字符串s的内容更新string对象。
- `string& assign(const char* s, size_t n)`:使用C风格字符串s的前n个字符更新string对象。
- `string& assign(size_t n, char c)`:为string对象赋予n个字符c。
- `string& assign(const string& str)`:将另一个string对象的内容赋予当前string对象。
- `string& assign(const string& str, int index, int n)`:将另一个string对象str从index位置开始的n个字符赋予当前string对象。
#### 4. string 类的容量操作
- `size_type size() const`:返回当前string对象的长度。
- `size_type length() const`:与size()功能相同。
- `size_type max_size() const`:返回string对象可能的最大长度。
- `void resize(size_type n, char c = '\0')`:改变当前string对象的大小为n,并用字符c填充多余的空间(如果有的话)。
- `bool empty() const`:判断当前string对象是否为空。
#### 5. string 类的元素访问
- `char& operator[](size_type pos)`:返回string对象中位置为pos的字符的引用。
- `char operator[](size_type pos) const`:返回string对象中位置为pos的字符。
- `char& at(size_type pos)`:返回string对象中位置为pos的字符的引用,对越界访问提供了异常处理。
- `const char* data() const`:返回一个指针,指向底层字符数组。
#### 6. string 类的插入与删除操作
- `iterator insert(iterator p, char c)`:在迭代器p指定的位置插入字符c。
- `void insert(size_type p, size_type n, char c)`:在位置p处插入n个字符c。
- `void insert(size_type p, const char* s)`:在位置p处插入C风格字符串s。
- `void insert(size_type p, const string& str)`:在位置p处插入string对象str。
- `void insert(size_type p, const string& str, size_type strIndex, size_type n)`:在位置p处插入string对象str从strIndex开始的n个字符。
- `void erase(size_type p = 0, size_type n = npos)`:删除从位置p开始的n个字符。
- `iterator erase(iterator p)`:删除迭代器p指定位置的字符。
- `iterator erase(iterator start, iterator end)`:删除从迭代器start到end之间的字符。
#### 7. string 类的查找与替换操作
- `size_type find(char c, size_type pos = 0) const`:从位置pos开始搜索字符c在string中的位置。
- `size_type find(const char* s, size_type pos = 0) const`:从位置pos开始搜索C风格字符串s在string中的位置。
- `size_type find(const string& str, size_type pos = 0) const`:从位置pos开始搜索string对象str在当前string对象中的位置。
- `size_type rfind(char c, size_type pos = npos) const`:从位置pos开始向后搜索字符c在string中的位置。
- `size_type replace(size_type pos, size_type n, const char* s)`:替换从位置pos开始的n个字符为C风格字符串s。
- `size_type replace(iterator start, iterator end, const char* s)`:替换从迭代器start到end之间的字符为C风格字符串s。
- `size_type replace(size_type pos, size_type n, const string& str)`:替换从位置pos开始的n个字符为string对象str。
- `size_type replace(iterator start, iterator end, const string& str)`:替换从迭代器start到end之间的字符为string对象str。
#### 8. string 类的比较操作
- `int compare(const char* s) const`:比较当前string对象和C风格字符串s。
- `int compare(size_type pos1, size_type n1, const string& str) const`:比较从位置pos1开始的n1个字符与string对象str。
- `int compare(size_type pos1, size_type n1, const char* s) const`:比较从位置pos1开始的n1个字符与C风格字符串s。
- `int compare(size_type pos1, size_type n1, const string& str, size_type pos2, size_type n2) const`:比较从位置pos1开始的n1个字符与从位置pos2开始的n2个字符。
- `int compare(size_type pos1, size_type n1, const char* s, size_type n2) const`:比较从位置pos1开始的n1个字符与n2个字符。
#### 9. string 类的其他操作
除了上述提到的函数之外,C++的string类还包含了许多其他有用的函数,例如:
- `void clear()`:清空string对象。
- `void swap(string& str)`:交换当前string对象与str的内容。
- `void copy(char* s, size_type n, size_type pos = 0)`:将从位置pos开始的n个字符复制到C风格字符串s中。
以上就是对C++ string类的详细讲解。通过本文档的介绍,我们可以看到string类为字符串操作提供了非常全面的接口。熟练掌握string类的各个函数将大大提高我们在C++中处理字符串的效率和安全。
在实际编程中,利用string类的成员函数可以简化很多原本复杂的字符串操作,并且避免了手动管理字符数组时容易出现的错误,如越界访问、内存泄漏等。string类的广泛使用也是C++现代编程风格的一个重要体现。
相关推荐




















痕忆丶
- 粉丝: 1695
最新资源
- Java与Sqoop结合源码实现CSV转Parquet文件测试
- Node.js快速搭建Express开发环境的指南
- Kontrola:项目问题监控与跟踪的高效工具
- Java库解析Parse REST API的实现与使用
- ZgeSensor: 在 Android 上使用 ZGameEditor 处理传感器库
- HTML5J企业部:推动日本企业IT的Web技术革新
- 基于Python的现代网上订购平台教程
- Erlang实现经典多人扫雷游戏Gridlock项目学习分享
- Docker环境下运行Rails应用程序的部署指南
- 在Docker容器内部署Docker Machine教程
- Funky: Go语言内置类型的功能扩展工具
- CatMan餐饮管理系统开源许可与技术架构解析
- isol8: 在线发布前的Web组件隔离工具
- 搭建Docker环境下的Jenkins Slave与Java开发环境
- 黄金比例插件让Sublime Text 23界面更美观
- 简易应用性能指标模块:快速性能测试与数据可视化
- 前端开发指南:掌握HTML等技术的资源宝典
- GeoIP工具:快速获取IP所属国家和地区信息
- Vibe项目氛围示例与Java服务器通信原型
- NGINX + PHP-FPM Docker网络堆栈快速搭建指南
- Python深度学习实战课程:Mask-Rcnn物体检测入门与应用
- 在CloudFoundry上运行Mendix应用的cf-mendix-buildpack源码解析
- Funcgo:将函数式Go语言代码编译到JVM和JavaScript平台
- 在Hetzner根服务器上部署FreeBSD救援环境的方法