🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
#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;
}