🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
#define _CRT_SECURE_NO_WARNINGS
#include<string>
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
void test_string3()
{string s1("hello world");s1[0] = 'x';cout << s1.size() << endl;for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;for (size_t i = 0; i < s1.size(); i++){s1[i]++;}cout << endl;s1[0] = 'x';for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;}
int main()
{test_string3();return 0;
}
在这个代码当中,结果为
我们可以看到,每个字节的ASCII码值都加了1
而若是我们使得【】中的数字大于s1的范围,会出现越界警告
s1[20];
const string s2("hello world");s2[0] = 'x';
而我们要是这个时候使用const进行修饰,则不能再对s2进行修改
接下来,我们讲解三种对string的遍历方式
- 下标+【】
string s1("hello world");//遍历方式1:下标+[]for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;
- 迭代器
//遍历方式2:迭代器auto it1 = s1.begin();while (it1 != s1.end()){*it1 += 3;cout << *it1 << " ";it1++;}cout << endl;
我们不仅可以对string进行遍历,而且可以对其中的值进行修改
- 范围for
//遍历方式3:范围for//底层角度,就是迭代器cout << s1 << endl;for (auto& e : s1){e++;cout << e << " ";}cout << endl;cout << s1 << endl;
对于范围for而言,相同的是我们不仅可以对其进行遍历,也可以对其进行修改,并且对于范围for而言,他的底层就是迭代器
list<int>lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);list<int>::iterator it = lt1.begin();while (it != lt1.end()){cout << *it << " ";++it;}cout << endl;for (auto e : lt1){cout << e << " ";}cout << endl;
void test_string5()
{const string s1("hello world");auto it1 = s1.begin();while (it1 != s1.end()){*it1 += 3;}
}
当我们用const修饰s1的时候,s1的内容使用迭代器仍然无法修改
接下来,我们来看一下rbegin和rend
auto cit1 = s1.rbegin();while (cit1 != s1.rend()){cout << *cit1 << " ";++cit1;}cout << endl;
其实通过结果我们可以看到,rend和rbegin进行了相反遍历
string s2("hello world");string::reverse_iterator it2 = s2.rbegin();while (it2 != s2.rend()){cout << *it2 << " ";++it2;}cout << endl;
其实通过这个代码,我们可以回顾到之前讲过的auto的作用,可以自动辨别类型,是不是相当方便。
我们接下来讲string中的下一个接口,对其按照字典序进行排序
}
void test_string6()
{string s1("hello world");cout << s1 << endl;//第一个和最后一个参与排序sort(s1.begin(), s1.end());sort(++s1.begin(), --s1.end());//前五个进行排序[0,5)sort(s1.begin(), s1.begin() + 5);cout << s1 << endl;
}
接下来我们来讲最后一个接口,push_back
void test_string7()
{string s1("hello world");cout << s1 << endl;//push_back只能增加字符s1.push_back('x');cout << s1 << endl;//s1.push_back("xxxxx");//append既可以用于字符串,也可以用于字符s1.append("yyyyyy!!");cout << s1 << endl;s1.append("x");cout << s1 << endl;string s2("111111");s1 += 'y';s1 += "zzzzzz";s1 += s2;cout << s1 << endl;}