文章目录
一、string类的介绍
C++中的string类是字符串类,它在C++中非常常用,有了string类以后,我们不需要像C语言那样定义字符数组来表示字符串,操作起来是非常方便的,因为string类底层已经将增、删、查、改以及扩容这些机制封装好了,我们只需要直接使用即可。
string类其实是basic_string模板类的一个实例,它是用char来实例化basic_string模板类。string类本质上就是一个可以管理动态增长的字符数组的类,并且这个字符数组以 ‘\0’ 结尾。
二、string类的使用
1.string的构造函数
string一共有7个构造函数,我们一般常用的构造函数是下图中的第一个函数即无参构造函数,第二个函数即拷贝构造函数,第四个函数即参数是常量字符串的构造函数。
下面我们举个小例子来实现以下string的构造:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1();// 无参构造函数
string s2("hello world");// 常量字符串构造函数
string s3(s2);// 拷贝构造函数
// 拷贝构造还可以写成下面这样子
string s4 = s2;
return 0;
}
2.string的赋值函数
string提供了三种赋值函数,分别是通过string对象赋值给string对象,通过常量字符串赋值给string对象,通过字符赋值给string对象。
下面我们用代码演示一下这三种赋值函数的使用方法:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s1("hello");
string s2;
s2 = s1;
cout << s2 << endl;
s2 = "world";
cout << s2 << endl;
s2 = 'A';
cout << s2 << endl;
return 0;
}
3.string的遍历方法
(1)[]+下标遍历
string类是提供了[]运算符重载的,这也就意味着string可以让我们像访问数组一样利用下标来访问元素,下面我们用代码来演示一下:
size()是string的一个成员函数,可以返回string的元素个数(不包括\0)
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s("hello world");
for (size_t i = 0; i < s.size(); i++)
{
cout << s[i];
}
cout << endl;
return 0;
}
(2)利用迭代器遍历
迭代器是容器内的内嵌类型,其实本质上是被重命名过的一个指针变量,迭代器是使用非常多的一个工具,下面用代码演示一下迭代器的使用:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s("hello world");
string::iterator it = s.begin();
while (it != s.end())
{
cout << *it;
++it;
}
cout << endl;
return 0;
}
这里需要介绍一下begin()和end()这两个函数,这两个函数是string类提供的函数接口,是用来配合迭代器使用的。begin()函数返回的是string字符串的首位置,end()函数返回的是string字符串最后一个位置(即最后一个字符的下一个位置)
如下图所示,s.begin()指向的是字符’h’的位置,而s.end()指向的是字符’\0’的位置。
(3)范围for遍历
范围for是c++提供的一个非常方便的访问方式,它可以自动取对象的内容并且自动向后访问自动停止,范围for的底层实现其实是迭代器,我们还可以利用auto关键字来配合使用范围for,下面我们用代码演示一下范围for的使用方式:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s("hello world");
for (auto ch : s)
{
cout << ch;
}
cout << endl;
return 0;
}
4.反向迭代器
上面string的遍历我们介绍了迭代器遍历法,使用begin()函数和end()函数的迭代器遍历是正向迭代器,反向迭代器顾名思义,就是顺序反过来了,它的用法与正向迭代器非常类似。
这里需要介绍一下rbegin()和rend()这两个函数,这两个函数是用来配合反向迭代器使用的,rbegin()函数返回的是string字符串的最后一个有效字符,rend()函数返回的是string字符串的第一个字符的前一个位置。
如下图所示,s.rbegin()指向的是字符’d’的位置,s.rend()指向的是字符’h’的前一个位置。
我们用代码来演示一下反向迭代器的使用:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s("hello world");
string::reverse_iterator rit = s.rbegin();
while (rit != s.rend())
{
cout << *rit;
rit++;