前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】STL 容器 - string 字符串操作 ② ( string 字符串遍历 | 使用 数组下标 [] 遍历字符串 | 使用 at 函数 遍历字符串 | 使用 迭代器 遍历字符串 )

【C++】STL 容器 - string 字符串操作 ② ( string 字符串遍历 | 使用 数组下标 [] 遍历字符串 | 使用 at 函数 遍历字符串 | 使用 迭代器 遍历字符串 )

作者头像
韩曙亮
发布2023-12-18 12:50:00
3050
发布2023-12-18 12:50:00
举报
文章被收录于专栏:韩曙亮的移动开发专栏
文章目录

  • 一、string 字符串遍历
    • 1、string 字符串遍历方法
    • 2、使用 数组下标 [] 遍历字符串
    • 3、使用 at() 函数 遍历字符串
    • 4、使用 string::iterator 迭代器 遍历字符串
    • 5、代码示例 - string 字符串遍历

一、string 字符串遍历


1、string 字符串遍历方法

string 字符串遍历方法 :

  • 使用 下标 遍历字符串 : 字符串可以像数组那样使用下标遍历 , 有两种方式 , 一种是使用重载的 [] 操作符 , 另一种就是使用 at() 函数 ;
  • 使用 迭代器 遍历字符串 : 使用 string::iterator 迭代器遍历字符串 ;

2、使用 数组下标 [] 遍历字符串

使用 数组下标 遍历字符串 , 主要调用 operator[] 运算符重载函数 实现 ’

在 C++ 的 std::string 类中 , operator[] 函数 是一个成员函数 , 这是一个运算符重载函数 ,

它用于访问字符串中的特定字符 , 这个函数接受一个整数参数 n , 表示要访问的字符的位置 ;

operator[] 函数的 函数原型如下 :

代码语言:javascript
复制
char& operator[] (int n);

该函数返回一个字符引用 , 表示字符串中位置为 n 的字符 ;

特别注意 : 该函数返回的是 字符的引用 , 因此可以直接用于 访问和修改 字符串中的字符 ;

代码示例 :

代码语言:javascript
复制
 	string s1 = "123456789";
 	
	// I. 使用数组方式遍历 string 字符串
	cout << "使用数组方式遍历 string 字符串 : ";
	for (int i = 0; i < s1.length(); i++)
	{
		// 输出 string 字符串中的单个 字符元素
		cout << s1[i] << " ";
	}
	// 输出回车换行
	cout << endl;

3、使用 at() 函数 遍历字符串

在 C++ 语言中的 std::string 类中 , 定义了一个成员函数 at() 函数 , 用于访问字符串中特定位置的字符 ; 该函数接受一个整数参数 n , 表示要访问的字符的位置 ;

at() 函数原型如下 :

代码语言:javascript
复制
const char& at(size_t pos) const;

at() 函数返回一个常量字符引用 , 表示字符串中位置为 pos 的字符 ;

operator[] 运算符重载函数不同 , at() 函数在访问超出字符串范围的索引时会抛出 std::out_of_range 异常 ;

代码示例 : 下面的代码中 , 故意增加 1 字节, 令其抛出 std::out_of_range 异常 ;

代码语言:javascript
复制
	string s1 = "123456789";
	
	// III. 使用 at() 函数遍历 string 字符串
	cout << "使用 at 函数遍历 string 字符串 : ";
	try
	{
		// 此处故意增加 1 字节, 令其抛出异常
		for (int i = 0; i < s1.length() + 1; i++)
		{
			// 输出 string 字符串中的单个 字符元素
			// at 函数如果越界 会 抛出异常
			cout << s1.at(i) << " ";
		}
		// 输出回车换行
		cout << endl;
	}
	catch ( ... )
	{
		cout << "出现异常" << endl;
	}

4、使用 string::iterator 迭代器 遍历字符串

首先 , 调用 string 类的 begin() 函数 , 获取迭代器 , 其可以理解为是指向元素的指针 ;

代码语言:javascript
复制
std::string::iterator it = str.begin(); 

然后 , 对迭代器进行自增操作 , 即可访问下一个元素的地址 ;

代码语言:javascript
复制
it++

最后 , 调用 string 类的 end() 函数 , 获取迭代器的最后一个元素地址 , 判断 迭代器 的指针地址 是否是 该地址 ,

代码语言:javascript
复制
it != s1.end()

代码示例 :

代码语言:javascript
复制
	string s1 = "123456789";
	
	// II. 使用 迭代器 遍历 string 字符串
	cout << "使用 迭代器 遍历 string 字符串 : ";
	for (string::iterator it = s1.begin(); it != s1.end(); it++)
	{
		// 输出 string 字符串中的单个 字符元素
		cout << *it << " ";
	}
	// 输出回车换行
	cout << endl;

5、代码示例 - string 字符串遍历

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;
#include "string"

int main() {

	string s1 = "123456789";

	// 遍历 string 字符串

	// I. 使用数组方式遍历 string 字符串
	cout << "使用数组方式遍历 string 字符串 : ";
	for (int i = 0; i < s1.length(); i++)
	{
		// 输出 string 字符串中的单个 字符元素
		cout << s1[i] << " ";
	}
	// 输出回车换行
	cout << endl;


	// II. 使用 迭代器 遍历 string 字符串
	cout << "使用 迭代器 遍历 string 字符串 : ";
	for (string::iterator it = s1.begin(); it != s1.end(); it++)
	{
		// 输出 string 字符串中的单个 字符元素
		cout << *it << " ";
	}
	// 输出回车换行
	cout << endl;


	// III. 使用 at() 函数遍历 string 字符串
	cout << "使用 at 函数遍历 string 字符串 : ";
	try
	{
		// 此处故意增加 1 字节, 令其抛出异常
		for (int i = 0; i < s1.length() + 1; i++)
		{
			// 输出 string 字符串中的单个 字符元素
			// at 函数如果越界 会 抛出异常
			cout << s1.at(i) << " ";
		}
		// 输出回车换行
		cout << endl;
	}
	catch ( ... )
	{
		cout << "出现异常" << endl;
	}
	

	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

使用数组方式遍历 string 字符串 : 1 2 3 4 5 6 7 8 9 使用 迭代器 遍历 string 字符串 : 1 2 3 4 5 6 7 8 9 使用 at 函数遍历 string 字符串 : 1 2 3 4 5 6 7 8 9 出现异常 请按任意键继续. . .

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、string 字符串遍历
    • 1、string 字符串遍历方法
      • 2、使用 数组下标 [] 遍历字符串
        • 3、使用 at() 函数 遍历字符串
          • 4、使用 string::iterator 迭代器 遍历字符串
            • 5、代码示例 - string 字符串遍历
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档