C++ 中的 string 类
C++中的
string 类是一个用于表示和操作字符串的类(容器)
,它是C++标准库的一部分。std::string提供了许多有用的成员函数来处理字符串,这些成员函数使得操作字符串变得更加简便。
这里列举一些常见的用法和功能,但不是所有。要查看所有用法和功能,请参阅C++标准库文档。
还有以下,是我写的一些关于string函数的使用注意事项,详情请看这篇文章:
构造函数
string(); // 默认构造函数
string(const string& other); // 拷贝构造函数
string(string&& other); // 移动构造函数
string(const char* s); // 从C字符串构造
string(const char* s, size_t n); // 从C字符串构造,取前n个字符
string(size_t n, char c); // 用n个字符c构造
常用成员函数
容器相关
size_t size() const; // 返回字符串长度
size_t length() const; // 同上
bool empty() const; // 判断字符串是否为空
void clear(); // 清空字符串
size_t max_size() const; // 返回字符串对象最大可容纳的字符数
void resize(size_t n); // 调整字符串大小
void resize(size_t n, char c); // 调整大小并用字符c填充
下标运算符
char& operator[](size_t pos); // 获取指定位置的字符引用
char& at(size_t pos); // 同上,但会检查越界
char& front(); // 返回第一个字符引用
char& back(); // 返回最后一个字符引用
注意:string的下标运算符不检查数组越界!!!
给string赋值与 += 运算符
string& operator=(const string& other); // 赋值运算符
string& operator=(string&& other); // 移动赋值运算符
string& operator=(const char* s); // 从C字符串赋值
string& operator+=(const string& other); // 字符串拼接
string& operator+=(const char* s); // 从C字符串拼接
string& operator+=(char c); // 追加字符
删除字符操作
void pop_back(); // 移除最后一个字符,容器操作
string& erase(size_t pos = 0, size_t len = string::npos);
// 删除从位置pos开始,长度为len的子串
添加,插入字符操作
void push_back(char c); // 在容器的尾部,添加一个字符
string& insert(size_t pos, const string& str);
// 在位置pos插入字符串str
交换字符串内容
void swap(string& other); // 交换两个字符串内容
查找函数
// 从位置pos开始查找子串str,返回找到的第一个位置,未找到则返回npos
size_t find(const string& str, size_t pos = 0) const;
// 从位置pos开始反向查找子串str,返回找到的第一个位置,未找到则返回npos
size_t rfind(const string& str, size_t pos = npos) const;
- C++string类型内置的搜索函数
这篇文章里介绍了关于string类型的所有查找函数
。
比较两个字符串大小
int compare(const std::string& str) const;
// 比较两个字符串,相等返回0,小于返回负数,大于返回正数
比较规则:
C++中的string类型的比较是基于字符的逐一比较
,即从字符串的第一个字符开始比较,如果有一个字符不同,则两个字符串不相等。在您提供的例子中,第3个字符和第4个字符是不同的,所以这两个字符串不相等。因此,使用bool operator==比较boot和boor时,将返回false。
替换字符操作
void replace(size_t pos, size_t len, const std::string& str);
// 用字符串str替换从位置pos开始,长度为len的子串
std::string& replace(size_t pos, size_t len, const char* s);
// 用C字符串s替换从位置pos开始,长度为len的子串
拷贝字符操作
// 获取(拷贝)子字符串,从位置pos开始,长度为len
string substr(size_t pos = 0, size_t len = npos) const;
size_t copy(char* s, size_t len, size_t pos = 0) const;
// 将从位置pos开始,长度为len的子串复制到字符数组s中
- 需要注意的是,
substr函数
的返回值,就是拷贝好的子字符串,具体用法是
string value = "hello, world!";
int pos = 0;
int len_a = 5;
string str = value.substr(pos, len_a);
那么此时的str = hello
- 而这里的copy函数呢,其实是把某一个string类型的字符串的n个字符,复制到一个字符类型的数组中。
int pos = 0;
int len_a = 5;
string value = "hello, world!";
char* buffer = new char[len_a + 1];
value.copy(buffer, len_a, pos);
buffer[len_a] = '\0'; // 添加结束字符
string str = buffer; // 使用字符数组创建新的字符串
delete[] buffer; // 释放字符数组
- 啊,看起来就很麻烦对嘛,所以在做算法题的时候,string真正的复制函数,
还得是substr函数
内存相关
allocator_type get_allocator() const; // 返回字符串对象的内存分配器
非成员函数:
string operator+(const std::string& lhs, const std::string& rhs);
// 字符串连接
string operator+(const std::string& lhs, const char* rhs);
// 字符串与C字符串连接
string operator+(const char* lhs, const std::string& rhs);
// C字符串与字符串连接
string operator+(std::string&& lhs, std::string&& rhs);
// 移动字符串连接
string operator+(std::string&& lhs, const std::string& rhs);
// 移动字符串与字符串连接
string operator+(const std::string& lhs, std::string&& rhs);
// 字符串与移动字符串连接
bool operator==(const std::string& lhs, const std::string& rhs);
// 字符串相等比较
bool operator!=(const std::string& lhs, const std::string& rhs);
// 字符串不等比较
bool operator<(const std::string& lhs, const std::string& rhs);
// 字符串小于比较
bool operator<=(const std::string& lhs, const std::string& rhs);
// 字符串小于等于比较
bool operator>(const std::string& lhs, const std::string& rhs);
// 字符串大于比较
bool operator>=(const std::string& lhs, const std::string& rhs);
// 字符串大于等于比较
std::istream& operator>>(std::istream& is, std::string& str);
// 输入流读取字符串
std::ostream& operator<<(std::ostream& os, const std::string& str);
// 输出流写入字符串
std::istream& getline(std::istream& is, std::string& str, char delim = '\n');
// 从输入流读取一行
总结
- 注意:这里的列表并不完整,还有很多其他成员和非成员函数。要查看完整的列表,请查阅C++标准库文档。同时,也可以查看C++标准库中关于std::string_view的相关用法,std::string_view是一个轻量级的字符串视图,可以更高效地处理字符串。