【C++ 07】string 类的常用接口介绍

🌈 Ⅰ 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 类下的正向迭代器定义格式

  1. 普通正向迭代器
string::iterator 迭代器名 = 对象名.begin() 或 对象名.end();
  1. 常量正向迭代器
string::const_iterator 迭代器名 = 对象名.begin 或 对象名.end();

2. string 类下的正向迭代器介绍

  • 对于正向迭代器,可以使用 begin() 函数返回一个指向指向字符串首字符的迭代器,也可以使用 end() 返回一个指向最后一个有效字符的下一个位置的迭代器。
  • 迭代器指向的字符可以使用 * 访问,可以对迭代器进行 ++ 或 - - 操作指向字符串的不同字符。
  • 普通的迭代器可以修改迭代器指向的内容,常量迭代器则不能。

在这里插入图片描述

3. string 类下的正向迭代器示例

在这里插入图片描述

3. 反向迭代器访问

  • 反向迭代器分为两种:普通反向迭代器;常量反向迭代器

1. string 类下的反向迭代器定义格式

  1. 普通反向迭代器
string::reverse_iterator 迭代器名 = 对象名.rbegin() 或 对象名.rend();
  1. 常量反向迭代器
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 开始一直取到最后一个有效字符
}

在这里插入图片描述

  • 84
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值