目录
介绍:
string类的七种构造函数:
string类的第三个构造函数
string类的第四个构造函数
string类的第五个构造函数
string类的第六个构造函数
string类常用的构造
string类对象的访问遍历操作
第一种遍历方式:
第二种遍历方式:迭代器遍历
第三种遍历方式:范围for循环遍历
介绍:
- string是表示字符串的字符串类
- 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
- string在底层实际是:basic_string模板类的别名,typedef basic_string string,所以string 在底层的本质上也是一个模板
- 不能操作多字节或者变长字符的序列。
- 在使用string类时,必须包含#include头文件以及using namespace std;
相关内容详细介绍:cplusplus.com/reference/string/string/?kw=string
string类的七种构造函数:
关于string的构造函数一共分为七种,其中第一种和第二种分别是默认构造和拷贝构造。
string类的第三个构造函数
string(const string& str,size_t pos,size_t len = npos);
string的第三个构造的意思是: 这个构造函数的作用是创建一个新的 string 对象,其中包含了从指定位置开始的一部分字符。这样可以方便地从一个较长的字符串中提取需要的子字符串。
换句话说,便是从pos位置开始提取len个字符 ,在str接收的字符串上
- str:要从中提取子字符串的源字符串。
- pos:指定要开始提取子字符串的位置。
- len:可选参数,指定要提取的子字符串的长度。默认值为 npos,表示提取从 pos 开始到源字符串的末尾的所有字符。
string类的第四个构造函数
string(const char* s)
这个是接收一个char类型的字符串作为参数,也就是说将一个字符串赋予给string的对象
const char* cstr = "Hello, C++";
string str(cstr); // 使用构造函数将字符串赋值给string的对象str
cout << str << endl; // 输出:Hello, C++
string类的第五个构造函数
string (const char * s , size_t n);
获取const char *s指向的字符串,size_t n 是指要获取这个字符串的字符个数
const char* cstr = "Hello, World!";
size_t n = 5;
std::string str(cstr, n); // 使用C风格字符串的前n个字符初始化std::string对象
- 在这个例子中,cstr 指向字符串 "Hello, World!"。
- 由于 n 被设置为5,std::string str(cstr, n); 会创建一个 std::string 对象 str并只包含 "Hello" 这5个字符,不包含后面的逗号和空格以及终止空字符。
string类的第六个构造函数
string(size_t n,char c);
string类的第六个构造函数本质上其实是一种初始化方式
string类常用的构造
string类对象的访问遍历操作
第一种遍历方式:
因为string是内置编码,所以不能使用指针进行提取,但是可以使用size进行提取string修饰的变量的字符串有效长度,同时记住size不获取\0
关于size详解:cplusplus.com/reference/string/string/size/
也就说获取字符串有多少个字符,同时使用运算符重载 operator[]来获取字符串第i个字符
例子中的s1[i]相当于s1.operator[](i)
关于operator [] 详解:cplusplus.com/reference/string/string/operator%5B%5D/
而由于operator []的本质是返回当前位置的字符,所以可以利用它的特性对字符串中的字符进行++或者--等相关的加减操作
第二种遍历方式:迭代器遍历
迭代器是一个类型,是定义在string内部的,所以需要指定类域
迭代器的行为像指针一样的类型对象,begin是返回第一个有效位置的迭代器,end是返回最后一个有效数据的下一个位置,这里的最后一个有效数据的下一个字符是\0,相当于指针的移动,从当前位置移动到\0位置结束
同时使用迭代器也可以进行字符串中的字符修改操作
迭代器的好处,是屏蔽了底层的细节,是谁都可以使用迭代器进行遍历,迭代器其是是一个通用的遍历方式
第三种遍历方式:范围for循环遍历
范围for的底层其实就是迭代器,和迭代器遍历在底层看其实是一样的没有差异的!