string(上)

目录

一、string类的简单介绍

二、string类中成员函数介绍

1.构造函数

1)string()

2)string(const string& str)

3)string(const string& str,size_t pos,size_t len = npos)

4)string(const char* s) 

5)string(const char* s,size_t n)

6)string(size_t n,char c)

7)string(InputIterator first,InputIterator last) 

2.遍历方式 

1)下标+[ ]

2)迭代器 

3) 范围for

3.iterator 

1)begin()和end() 

2)rbegin()和rend()

3)cbegin()和cend 

4)crbegin()和crend()


一、string类的简单介绍

C++中的string是一个表示字符串的类,它提供了丰富的成员函数来操作字符串。里面有一百多个成员函数,在使用时就非常方便,注意:使用时需要包含头文件<string>。

下图为其中一部分截图:

接下来慢慢介绍相关成员函数。

二、string类中成员函数介绍

1.构造函数

在C++98中有7种构造函数,我们接下来逐一介绍。

1)string()

第一个构造函数是一个默认构造函数,它会创建一个空的字符串。

2)string(const string& str)

第二个是拷贝构造函数,用所传入的参数来初始化。

3)string(const string& str,size_t pos,size_t len = npos)

第三个构造函数从str的pos位置开始拷贝,拷贝到len,如果实际字符个数少于len就拷贝到结尾

需要注意的是pos是下标,下标是从0开始的。

可以看到第三个参数提供了缺省值npos,npos是整型最大值,当我们不写第三个参数时默认就是到npos,而npos是肯定会大于原字符串的长度的,所以会一直拷贝到结尾。

4)string(const char* s) 

这个构造函数参数是一个字符串,然后会用该字符串初始化,如上边那个例子str1。

5)string(const char* s,size_t n)

这个构造函数也是用传入的字符串来初始化,与上面不同的是,只取该字符串中的n个字符。

6)string(size_t n,char c)

该构造函数是用n个字符c来初始化。

7)string(InputIterator first,InputIterator last) 

这个构造函数是根据给定的迭代器范围创建一个字符串对象。

 平时用的比较多的还是1)2)4)这三个。

2.遍历方式 

1)下标+[ ]

⭐size()函数计算的是有效字符串的长度,即不包括\0。

⭐使用[ ]遍历时,实际上会对下标进行检查,当越界时会报错。

2)迭代器 

string::begin()和string::end()分别返回指向字符串第一个元素和最后一个元素后一个位置(即\0)的迭代器。

 

iterator是可读可写的,而const_iterator是只可读不可写的,迭代器所指向的数据不能修改,但本身是可以修改的,类似指针const int* p。

3) 范围for

范围for底层角度也是迭代器,在for循环里e++不会改变原来的字符串,因为是拷贝过来的,将*it拷贝给e(在上述代码中)。但如果改成auto& e:str就会改变。

3.iterator 

1)begin()和end() 

在上边已经说过了,begin()和end()分别返回指向容器开头和结尾的迭代器。

需要注意的是,返回类型有两种,一种是iterator,一种是const_iterator,const_iterator只可读,不能改变迭代器所指向的数据。

2)rbegin()和rend()

rbegin()返回一个指向容器最后一个元素的反向迭代器,rend()返回一个指向容器第一个元素前一个位置的反向迭代器。

这里画图区别一下1)和2):

 begin()和end()是从左往右走,而rbegin()和rend()是从右往左走,当对迭代器++时是往左走。

 

rbegin()和rend()的意义就是可以反向遍历字符串。 

3)cbegin()和cend 

cbegin()和cend()与begin()和end()就非常相似了,只是返回的是常量迭代器。

4)crbegin()和crend()

crbegin()和crend()就非常相似了,只是返回的是常量反向迭代器。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-03 01:16:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-03 01:16:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-03 01:16:05       82 阅读
  4. Python语言-面向对象

    2024-05-03 01:16:05       91 阅读

热门阅读

  1. Python实战开发及案例分析(1)——Web开发

    2024-05-03 01:16:05       29 阅读
  2. 机器学习-什么是 PCA?

    2024-05-03 01:16:05       29 阅读
  3. [leetcode]最多公共前缀

    2024-05-03 01:16:05       30 阅读
  4. 数据库索引(Mysql)

    2024-05-03 01:16:05       31 阅读
  5. 【C】190 颠倒二进制位

    2024-05-03 01:16:05       37 阅读
  6. 【SSL 1967】A和B

    2024-05-03 01:16:05       27 阅读