文章目录
- 🌈 Ⅰ string 类对象的常见构造函数
- 🌈 Ⅱ string 类对象的容量相关操作
- 🌈 Ⅲ string 类对象的访问及遍历
- 1. 下标访问及遍历
- 2. 正向迭代器访问
- 3. 反向迭代器访问
- 🌈 Ⅳ string 类对象的修改操作
- 1. 插入字符或字符串
- 2. 字符替换
- 🌈 Ⅴ string 类对象的操作
- 1. 查找指定字符位置
- 2. 获取字符串的子串
🌈 Ⅰ string 类对象的常见构造函数
函数说明
函数名称 | 功能说明 |
---|---|
string() | 构造一个空的 string 类对象,即空字符串 |
string(const char* s) | 用一个常量字符串来构造 string 类对象 |
string(const string& s, size_t pos, size_t len = npos) | 从指定字符串 s 的 pos 下标处开始拷贝 len 个字符去构造 string 类对象,如果 len 超过了 pos 之后的字符个数,则从 pos 开始直接取到字符串 s 的末尾 |
string(size_t n, char c) | 使用 n 个指定字符 c 来构建 string 类对象 |
string(cost string& s) | 使用一个已有的 string 类对象去拷贝构造另一个 string 类对象 |
使用示例
#include <iostream>using std::cout;
using std::endl;
using std::string;void test1()
{string str1; // 生成空字符串string str2("hello wordl!"); // 用指定常量字符串构造 string 对象string str3("hello", 3, 10); // 从下标为 3 的字符开始拷贝 10 个字符构造string str4(5, 'x'); // 生成由五个 x 构成的 string 字符串对象string str5(str2); // 用 str2 来拷贝构造 str5 对象
}
🌈 Ⅱ string 类对象的容量相关操作
函数说明
函数名称 | 功能说明 |
---|---|
size() | 返回字符串有效字符长度,即 \0 之前的字符个数 |
capacity() | 求当前 string 能容纳的最大有效字符个数,计算的结果不包括 \0 |
empty() | 判断指定字符串是否为空串,是则返回 true,否则返回 false |
clear() | 清空指定字符串中的所有有效字符 |
reserve(n) | 为指定字符串预留指定 n 个字节的空间,实际开辟的空间只会 >= n |
resize(n, c) | 将有效字符的个数改为 n,如果 n 大于原有效字符的个数则用指定字符 c 填充剩余位置,反之删除有效字符个数 |
使用示例
void test2()
{string str1("hello world!");cout << "size: " << str1.size() << endl; // 求 str1 串的有效字符个数cout << "capacity: " << str1.capacity() << endl;// 求 str1 能容纳的有效字符个数cout << "empty: " << str1.empty() << endl; // 判断 str1 是否为空串str1.clear(); // 清空 str1 中的所有有效字符cout << "clear: " << str1 << endl;str1.reserve(100); // 为 str1 预开辟 >= 100 字节的空间cout << "reserve(100): " << str1.capacity() << endl;string str2("hello world!");str2.resize(5); // 将 str2 中的有效字符个数改为 5 个cout << "resize(5): " << str2 << endl;string str3("hello world!");str3.resize(30, '#'); // 有效字符数改为 30 个,超出的部分用 # 填充cout << "resize(5, '#'): " << str3 << endl;
}
🌈 Ⅲ string 类对象的访问及遍历
1. 下标访问及遍历
- 就和遍历普通的字符串对象一样,可以使用下标访问字符串中的每个字符。
- 能够使用下标访问 string 类对象的内容,实际上是在 string 类中使用 operator[ ] 对 [ ] 进行了运算符重载。
2. 正向迭代器访问
- 正向迭代器分为两种:普通正向迭代器;常量正向迭代器。
1. string 类下的正向迭代器定义格式
- 普通正向迭代器
string::iterator 迭代器名 = 对象名.begin() 或 对象名.end();
- 常量正向迭代器
string::const_iterator 迭代器名 = 对象名.begin 或 对象名.end();
2. string 类下的正向迭代器介绍
- 对于正向迭代器,可以使用 begin() 函数返回一个指向指向字符串首字符的迭代器,也可以使用 end() 返回一个指向最后一个有效字符的下一个位置的迭代器。
- 迭代器指向的字符可以使用 * 访问,可以对迭代器进行 ++ 或 - - 操作指向字符串的不同字符。
- 普通的迭代器可以修改迭代器指向的内容,常量迭代器则不能。
3. string 类下的正向迭代器示例
3. 反向迭代器访问
- 反向迭代器分为两种:普通反向迭代器;常量反向迭代器。
1. string 类下的反向迭代器定义格式
- 普通反向迭代器
string::reverse_iterator 迭代器名 = 对象名.rbegin() 或 对象名.rend();
- 常量反向迭代器
string::const_reverse_iterator 迭代器名 = 对象名.rbegin() 或 对象名.rend();
2. string 类下的反向迭代器介绍
- 对于反向迭代器,可以使用 rbegin() 返回一个指向最后一个有效字符的迭代器,rend() 返回一个指向字符串首字符前一个位置的迭代器。
- 不管是迭代器是正向还是反向,对迭代器进行 ++ 操作始终是让迭代器靠近 ®end 的位置 ,对迭代器进行 – 操作始终是让迭代器远离 ®end 的位置。
3. string 类下的反向迭代器示例
🌈 Ⅳ string 类对象的修改操作
1. 插入字符或字符串
函数说明
- 以下实现插入的函数操作在插入之后如果超过字符串容量都会自动实现扩容。
函数名称 | 功能说明 |
---|---|
push_back( c ) | 在指定字符串的末尾插入一个字符 |
insert(pos, string) | 在字符串指定的 pos 位置插入一个字符串,原 pos 位置及之后的字符都要后移 |
append(string) | 在原字符串后追加一个字符串 |
operator+= | 对 += 进行了重载,在原字符串后追加一个字符串 |
使用示例
void test4()
{string str1("hello");str1.push_back('#'); // 将 # 尾插入 st1 末尾string str2("hello");str2.insert(0, "insert "); // 在下标 0 处插入字符串string str3("hello");str3.append(" append"); // 在字符串末尾追加字符串string str4("hello");str4 += " operator+="; // 在字符串末尾追加字符串
}
2. 字符替换
函数说明
函数名称 | 功能说明 |
---|---|
replace(pos, n, s) | 将字符串中 pos 位置开始的 n 个字符替换成字符串 s |
使用示例
🌈 Ⅴ string 类对象的操作
1. 查找指定字符位置
函数说明
函数名称 | 功能说明 |
---|---|
find(c, pos) | 从字符串的 pos 位置开始 往后 查找指定字符 c,返回该字符在字符串中的位置,如果不提供 pos 默认从第一个有效字符开始,如果找不到指定字符 c 则返回一个 string::npos |
rfind(c, pos) | 从字符串的 pos 位置开始 往前 查找指定字符 c,返回该字符在字符串中的位置,如果不提供 pos 默认从最后一个有效字符开始,如果找不到指定字符 c 则返回一个 string::npos |
使用示例
void test5()
{string str("hello hello");size_t pos1 = str.find('e', 0); // 从第 1 个字符开始 往后 找字符 e 的位置size_t pos2 = str.rfind('e', 9);// 从第 10 个字符开始 往前 找字符 e 的位置if (pos1 != string::npos) // find 找到了指定字符 e{cout << "find: " << pos1 << endl;}if (pos2 != string::npos) // rfind 找到了指定字符 e{cout << "rfind: " << pos2 << endl;}
}
2. 获取字符串的子串
函数说明
函数名称 | 函数功能 |
---|---|
substr(pos, n) | 截取指定字符串的从 pos 下标开始的往后 n 个字符作为该串的子串返回,如果不指定 n,则默认从 pos 位置一直取到字符串末尾 |
使用示例
void test5()
{string str("hello world!");string sub1 = str.substr(3, 5); // 从下标 3 开始截取 5 个字符string sub2 = str.substr(3); // 从下标 3 开始一直取到最后一个有效字符
}