C++中遍历字符串

C++中的常用遍历方式:

一、普通 for 循环遍历

二、C++中迭代器的使用

三、范围 for 的使用

无论是C 语言还是C++ ,我们最常用到的遍历方式便是 for ( ; ; ) 循环的方式,一一遍历数组/字符串内容然后将其打印,接下来我们一起来看看常用遍历方式:

一.普通的 for 循环遍历

首先我们来看看一组打印代码:

string str1="12345";
int i=0;
for(;i<str1.size();++i){
	cout<<str1[i]<<" ";
}
cout<<endl;

上述代码就是一段普通的用 for 循环来打印字符串内容的代码,接下来将介绍另外一种打印方式:iterator 接口

在这里插入图片描述

二、迭代器 iterator

迭代的使用类似于指针,同样可以进行 解引用操作和自增操作

(一)begin 接口与 end 接口

iterator begin();
const_iterator begin() const;

iterator end();
const_iterator end() const;

1.可读可写型

迭代器是一种元素的通用访问机制,它的主要用法:

string str1="12345";
string::iterator it=str1.begin();
while(it!=str1.end()){
	cout<<*it<<" ";
	++it;
}
cout<<endl;

这里的 begin 与 end 是 iterator 接口中常用迭代器,其中 begin 迭代器指向字符串 str1 的首元素位置,end 迭代器指向字符串 str1 的尾元素的下一个位置

在这里插入图片描述
其中,使用 iterator 接口可以进行元素指向内容的修改:

string str1="12345";
string::iterator it=str1.begin();
while(it!=str1.end()){
    *it=‘a’;
	cout<<*it<<" ";
	++it;
}
cout<<endl;

在这里插入图片描述
主要是因为这里使用的是 非 const 接口,因而可以进行字符串内容的修改,iterator 接口为可读可写。

2.只读型

倘若使用第二个 const 接口,在 debug 版本之下进行调试就会发生中断操作,但是在 Release 版本之下不会报错:
在这里插入图片描述
在这里插入图片描述
主要是因为这里使用了const 修饰,因而字符串内容是不可以利用引用类型来修改,此时 iterator 接口是只读型接口。

(二)cbegin 接口与 cend 接口

const_iterator cbegin() const
const_iterator cend() const

可以看出来这两个接口都是被 const 修饰,因而cbegin / cend 都是只读迭代器,不可以修改其内容

在这里插入图片描述
当使用 *it 来修改字符串内容时,出现了错误提示

(三)rbegin / rend 接口

rbegin 与 rend 是反向迭代器,rbegin:指向最后一个元素的位置;rend:指向第一个元素的前一个位置
在这里插入图片描述
接口说明:

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
reverse_iterator rend();
const_reverse_iterator rend() const;

在这里插入图片描述

三、范围 for

for(当前需要查找的遍历:需要遍历的容器)

常见范围 for 书写形式:
1.只读:for(const auto& 变量:需要遍历容器)
2.可读可写:for(auto& 变量:需要遍历的容器)

void test()
{
	string s = "13456";
	for (char ch : s) {
		cout << ch << " ";
	}
	cout << endl;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在进行练习时候要注意是否被 const 修饰(可读可写 / 只读),注意正确的调用接口

今天的分享就到此结束了,有任何问题可以留言哦~~

美好的一天从敲代码开始 ,加油!
biubiubiu~~~~

C++ 中,如果字符串中包含中文字符,需要使用宽字符类型 `wchar_t` 或者多字节字符类型 `char` 来存储。在遍历字符串时,需要注意编码格式,避免出现乱码。 以下是一个遍历宽字符类型字符串的例子: ``` #include <iostream> #include <locale> #include <codecvt> int main() { std::wstring str = L"你好,世界!"; std::locale loc("zh_CN.UTF-8"); std::wcout.imbue(loc); std::wcout << str << std::endl; for (auto c : str) { std::wcout << c << std::endl; } return 0; } ``` 以上代码使用了 UTF-8 编码格式,可以正确输出中文字符。在遍历字符串时,使用 `auto` 关键字可以自动推断字符类型。注意,输出字符时需要使用 `std::wcout` 输出流。 如果使用的是多字节字符类型字符串,可以使用 `std::wstring_convert` 类进行转换: ``` #include <iostream> #include <locale> #include <codecvt> #include <string> int main() { std::string str = "你好,世界!"; std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; std::wstring wstr = converter.from_bytes(str); std::locale loc("zh_CN.UTF-8"); std::wcout.imbue(loc); std::wcout << wstr << std::endl; for (auto c : wstr) { std::wcout << c << std::endl; } return 0; } ``` 以上代码将多字节字符类型字符串转换为宽字符类型字符串,并且使用了 UTF-8 编码格式。在遍历字符串时,使用 `auto` 关键字可以自动推断字符类型。注意,输出字符时需要使用 `std::wcout` 输出流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值