C++ 中的 string
容器
什么是 string
?
string
是一个封装了动态字符串的类,它允许您处理文本数据。- 与 C 语言中的字符数组相比,
string
提供了更多功能,例如自动管理内存、字符串拼接、查找、替换等。
基本概念
-
本质:
string
是 C++ 风格的字符串,本质上是一个类。- 它内部封装了
char*
,管理字符串的存储,是一个char*
型的容器。 - 与 C 语言中的字符指针
char*
不同,string
是一个类,具有更多功能。
-
特点:
string
类内部封装了许多成员方法,例如查找、拷贝、删除、替换、插入等。- 管理
char*
所分配的内存,不用担心复制越界和取值越界等问题。
构造函数
以下是 string
容器的一些构造函数:
string()
: 创建一个空的字符串。string(const char* s)
: 使用 C 风格字符串s
初始化。string(const string& str)
: 使用另一个string
对象初始化。string(int n, char c)
: 使用n
个字符c
初始化。
示例:
#include <string>
void test01() {
string s1; // 创建空字符串,调用无参构造函数
const char* str = "hello world";
string s2(str); // 把 C 风格字符串转换成了 string
string s3(s2); // 调用拷贝构造函数
string s4(10, 'a'); // 创建包含 10 个字符 'a' 的字符串
}
赋值操作
- 给
string
字符串进行赋值:string& operator=(const char* s)
: 将 C 风格字符串赋给当前字符串。string& operator=(const string& s)
: 将字符串s
赋给当前字符串。string& operator=(char c)
: 将字符赋给当前字符串。string& assign(const char* s)
: 将 C 风格字符串赋给当前字符串。string& assign(const char* s, int n)
: 将字符串s
的前n
个字符赋给当前字符串。string& assign(const string& s)
: 将字符串s
赋给当前字符串。
示例:
// 赋值
void test02() {
string str1;
str1 = "hello world"; // 赋值操作
string str2;
str2 = str1;
string str3;
str3 = 'a'; // 字符赋值
string str4;
str4.assign("hello C++"); // 使用字符串赋值
string str5;
str5.assign("hello C++", 5); // 使用部分字符串赋值
string str6;
str6.assign(str5); // 使用拷贝构造函数
}
字符串拼接
- 在字符串末尾拼接字符串:
string& operator+=(const char* str)
: 重载+=
操作符。string& operator+=(const char c)
: 重载+=
操作符。string& operator+=(const string& str)
: 重载+=
操作符。string& append(const char* s)
: 将字符串s
连接到当前字符串结尾。string& append(const char* s, int n)
: 将字符串s
的前n
个字符连接到当前字符串结尾。string& append(const string& str)
: 将字符串str
连接到当前字符串结尾。string& append(const string& str, int pos, int n)
: 将字符串str
中从位置pos
开始的n
个字符连接到当前字符串结尾。
示例:
// 字符串拼接
void test03() {
string str1 = "hello";
str1 += " world"; // 使用 += 操作符拼接字符串
str1 += '!'; // 拼接字符
string str2 = " C++";
str1.append(str2); // 使用 append() 方法拼接字符串
str1.append(str2, 0, 2); // 拼接部分字符串
}
字符串查找和替换
-
查找:
int find(const char* s, int pos = 0) const
: 在当前字符串中查找字符串s
,返回第一次出现的位置。int find(const string& str, int pos = 0) const
: 在当前字符串中查找字符串str
,返回第一次出现的位置。int rfind(const char* s, int pos = npos) const
: 在当前字符串中从后往前查找字符串s
,返回最后一次出现的位置。int rfind(const string& str, int pos = npos) const
: 在当前字符串中从后往前查找字符串str
,返回最后一次出现的位置。
-
替换:
string& replace(int pos, int n, const char* s)
: 用字符串s
替换从位置pos
开始的n
个字符。string& replace(int pos, int n, const string& str)
: 用字符串str
替换从位置pos
开始的n
个字符。
示例:
// 字符串查找和替换
void test04() {
string str = "hello world, hello C++!";
int pos = str.find("hello"); // 查找第一次出现的位置
int rpos = str.rfind("hello"); // 从后往前查找最后一次出现的位置
str.replace(pos, 5, "hi"); // 替换
}
其他常用操作
-
获取子串:
string substr(int pos, int n) const
: 返回从位置pos
开始的n
个字符组成的子串。
-
比较:
int compare(const char* s) const
: 比较当前字符串和字符串s
。int compare(const string& str) const
: 比较当前字符串和字符串str
。
示例:
// 其他常用操作
void test05() {
string str = "hello world";
string sub = str.substr(6, 5); // 获取子串
int cmp = str.compare("hello"); // 比较字符串
}