
虽然市场上和网络上有许多类库,但是C++本身也有自带一些基本类库,称为标准库。
使用标准库时 需要用预处理指令#include 和尖括号引用标准库。
#include<string>
INDEX
一、申请字符串变量
二、string类的构造函数
三、string类重载运算符
string类一类用来进行字符串处理的类。
虽然使用类必须包含头文件,但是好像在vs2019的IDE中好像可以不用包含#incldue<string>就能使用string。
注意关键字string是在std空间下的所以必须用下面的形式。
std::string
using std::string;
suing namespace std;
一、申请字符串变量
简介:在前面已经提过string类了,我们知道string类的第一个功能就是
可以定义能字符串的变量,(其实是string对象)。
功能:用于字符串储存的变量。
语法:string 变量名;

.
二、string类的构造函数
构造函数是类在创建对象时首先会运行的程序。所以我们来瞧一瞧string在创建对象时会做什么。
●函数0:string(); //默认构造函数
功能:创建一个string对象,长度为0;
●函数1:string(const char *s) ;
功能:将对象初始化为s,并指向NBTS
(接受并储存字符串或char数组,并以空字符结尾)
说明:NBTS(null-terminated string):以空字符结尾的字符串。
(注意:空字符 \n 也是一个字符,并不是没有字符)
注意:从函数原型上看,该函数接受一个char类型的地址,
但是编译器会进行参数优化什么的,实际上该函数可以接受字符串为参数,
具体为什么我也暂时不懂。

.
●函数2:string(size_type n , char c);
功能:创建一个string对象,接受一字符c,并把这字符c复制n次。
参数说明:
size_type n //接受一个数值n,复制的次数。
char c //接受一个字符c,要复制的字符。

.
●函数3:string(const string & str);
功能:接受一个string对象str,将新建的string对象初始化为str
(就是用一个对象初始化新建的对象,其实就是复制)
参数说明:
const string & str //接受一个对象str,用这个对象初始化。

.
●函数4:string (const char* s, size_type n);
功能:将对象初始化,并指向NBTS,并在第n个字符出插入空字符。
( 接受并保存字符串,但不管字符串有几个,只保留前n个)
参数说明:
const char *s //接受需要保存的字符串,或char数组
size_type n //保存的长度

.
●函数5:
template<class Iter>
string(Iter being , Iter end);
功能:接受2个元素的地址,取两个地址之前的元素。并储存在string对象中。
注意:这个构造函数是函数模板,接受的参数都为泛型。
因此每个元素的间隔以接受的参数而定。
参数说明:
Iter being //接受一个起始地址
Iter end //接受一个终止地址

.
●函数6:string(const string &str , string size_type pos = 0 , size_type n = npos);
功能:接受一个字符串,并从中截取一段,但不是按地址区间,而是按字符的顺序。
参数说明:
const string &str //接受字符串,或者string对象。
string size_type pos = 0 //截取字符串的起始位置,初始值0表示默认从头开始
size_type n = npos //截取字符串的末尾位置,初始值npos表示默认到字符串尾
补充:
npos:size_type类型中表示的最大值常量,通常用来表示一个不存在的位置
这个常量在std空间下的string空间下的一个常量符号。
因此要用这种形式引用:std::string::npos ,或者使用编译指令。
nops这里用来表示字符串的最后面。

.
●函数7: string( string && str ); //C++11新增构造函数
功能:这个函数的功能其实和 string(const string & str); 差不多
注意:但区别在于 string & 是引用一个对象,而string && 称为“右值引用”。
这里函数被称为“移动构造函数”具体我也还不懂这是什么。
相比之前的那个函数只是速度快了。
●函数8: string( initializer_list<char> il ); //C++11新增构造函数
功能:使得string对象可以像初始化数组一样初始化string对象。

.
三、string类重载运算符
●向string对象后追加字符
语法:对象名 += "字符串";

●两个string的字符串合并,相加
语法: 对象A = 对象B +对象C;

.
●逻辑运算符
string对象也对逻辑运算符进行了重载,一般比较的参考是ASCII表进行对比的。
字符串,是从左边开始对比直达出现差异终止。
> < == <= >= !=

.
●流运算符重载
cin 和 cout 是一个对象参数,string对流进行的重载。
string输入流重载函数语法: (输出流也差不多)
operator>>(cin , lname );
//(原本想找函数原型但看不懂QAQ)
参数说明:
cin是空间std已经完成定义的对象。
lname是用来保存输入的值
补充:
C风格的输入流,也有重载,但是是以友元的形式
cin.operator>>(lname);
