C++关于string的详细讲解

一、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++;
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JJP1124

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值