C++编程笔记 — String类 (1)
猫头车子
编辑于 2019年10月11日 13:01
收录于文集
共89篇

虽然市场上和网络上有许多类库,但是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,复制的次数。

            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对象后追加字符

    语法:对象名 += "字符串&#​34;;

●两个string的字符串合并,相加

    语法: 对象A = 对象B +对象C;

.

●逻辑运算符

string对象也对逻辑运算符进行了重载,一般比较的参考是ASCII表进行对比的。

字符串,是从左边开始对比直达出现差异终止。

> < == <= >= !=  

.

●流运算符重载

cin 和 cout 是一个对象参数,string对流进行的重载。

    string输入流重载函数语法: (输出流也差不多)

        operator>>(cin , lname );

        //(原本想找函数原型但看不懂QAQ)

    参数说明:

        cin是空间std已经完成定义的对象。

        lname是用来保存输入的值

    补充:

        C风格的输入流,也有重载,但是是以友元的形式

        cin.operator>>(lname);