我的C++字符串类使用笔记。
字符串类
-
C++可以使用字符数组表示字符串,存在诸多不便:
// 将字符串常量赋值给指向常量的指针 const char* str = "program"; // 将字符串变量赋值给字符数组 char str1[8] = {'p', 'r', 'o', 'g', 'r', 'a', 'm', '\0'}; char str2[8] = "program"; char str3[] = "program";- 字符串操作需要使用
<cstring>头文件中定义的字符串处理函数; - 当字符串长度不确定时,需要手动进行动态内存分配;
- 字符串操作需要使用
- C++将字符串相关操作进行了封装,形成了字符串类
string; -
严格来说,
string是类模板basic_string的一个特化实例,但是其使用时的特点与类相同,可以当做一个类来使用:typedef basic_string<char> string; - 字符串类不是标准模板库(Standard Template Library,STL)的一部分,但是其行为与STL容器一致,可以与STL算法配合使用;
-
使用时需要包含头文件:
#include <string>
构造函数
string(); // 默认构造
string(const string& str); // 拷贝构造
string(const string& str, size_t pos, size_t len = npos); // 子字符串构造
string(const char* s); // C风格字符串构造
string(const char* s, size_t n); // 缓冲区构造
string(size_t n, char c); // 填充构造
template <class InputIterator>
string(InputIterator first, InputIterator last); // 范围构造
string(initializer_list<char> il); // 初始化列表构造,C++11引入
string(string&& str) noexcept; // 移动构造,C++11引入
操作符
| 操作符 | 示例 | 含义 |
|---|---|---|
| + | s + t |
将串s和t连接成一个新串 |
| = | s = t |
用t更新s |
| += | s += t |
等价于s = s + t |
| == | s == t |
判断s与t是否相等 |
| != | s != t |
判断s与t是否不等 |
| < | s < t |
判断s是否小于t |
| <= | s <= t |
判断s是否小于或等于t |
| > | s > t |
判断s是否大于t |
| >= | s >= t |
判断s是否大于或等于t |
| [] | s[i] |
访问串中下标为i的字符,也可通过成员函数s.at(i) |
常用基本功能
size_t s.size()
bool s.empty()
void s.push_back(char c) // 追加单个字符
void s.pop_back()
string s.substr(size_t pos, size_t len) // 取子字符串
void s.append(const string& str) // 追加字符串
遍历字符串
for (size_t i = 0; i < s.size(); i++) // 常规方式
for (char c : s) // C++11引入
for (char& c : s) // C++11引入,速度更快
参考
- 《C++语言程序设计》
- cplusplus
- C++ string详解,C++字符串详解-C语言中文网
- C++ string(C++字符串)详解-C语言中文网
- C++ string构造函数和析构函数详解-C语言中文网
- C++ string类成员函数汇总(超全)-C语言中文网
- C++ string字符串比较方法详解-C语言中文网
- C++ string字符串修改和替换方法详解-C语言中文网
- C++ string获取字符串元素:[]和at()-C语言中文网
- C++ string类(C++字符串)完全攻略-C语言中文网
- C++ string字符串类的用法-C语言中文网
- C++ basic_string(字符串类模板)详解-C语言中文网
- C++ string_view的用法-C语言中文网
- 字符串1-CSDN博客
- 字符串2-CSDN博客
- 字符串3-CSDN博客
- 字符串4-CSDN博客