C++:string类篇

string类的介绍

        概念:

                std::string是C++ 标准库中用于处理字符串的类,它封装了对字符序列的操作,使得字符串处理更加便捷和安全。

        特点:

        1.动态内存管理:std::string会自动分配和释放内存,避免了手动管理内存的复杂性。

        2.丰富的成员函数:提供了各种成员函数用于字符串操作,如连接、查找、替换和子串提取等。

        3.支持 C 风格字符串:可以通过构造函数和赋值操作与 C 风格字符串(char*)进行转换。

        4.安全性:比 C 风格字符串更安全,避免了缓冲区溢出等常见问题。

string类常用接口

                构造函数:

                   1.string();使用无参构造初始化string对象:

                        2.string (const char* s);使用字符串初始化对象:

        

        字符串属于常量类型,且默认以字符'\0'结尾,使用字符串初始化对象会从字符的开始位置一直拷贝到'\0'结束。

                3.string (const string& str);使用已经存在的string对象拷贝新的string对象。

               

                4.string (const string& str, size_t pos, size_t len = npos);从已有的string对象的第pos个位置拷贝len个长度的字符给新对象。

                npos:是string类中的静态成员变量,类型为size_t(无符号整型)值为-1(二进制全为1及整型的最大值)

        

                

                5.string (const char* s, size_t n);拷贝从第一个字符串开始的n个字符。

        析构函数:

                string类内部通常使用动态分配的内存来存储字符串数据。析构函数负责释放这些内存。析构函数不需要我们主动调用,编译器会自动进行析构。

        赋值拷贝:

                1.string& operator= (const string& str);赋值拷贝已有的string对象

                

                2.string& operator= (const char* s);赋值拷贝一个常量字符串

        string::operator[ ]

                string对象支持用数组的形式去访问string里的成员变量中的内容。

        同时operator[ ]又构成函数重载,及修饰const的string对象同时返回const引用,不能修改。编译器会根据传入的类型来自动识别调用const operator[ ]还是operator[ ]。

        string::Iterators(迭代器)接口函数

              Iterator的概念:

        在 C++ 中,迭代器(iterator)是一种用于遍历容器(如std::vector,std::list,std::string等)元素的工具。迭代器提供了一种统一的接口,使得对不同容器的元素访问和操作变得简单和一致。可以将迭代器视为容器的“指针”,它们允许你在容器中移动,读取和修改元素。

       
                std::begin与std::end     

        从上图可以看到,我们创建了一个string类的iterator(迭代器)变量it,并用s1.begin()函数的返回的迭代器值赋值给it,接着就类似指针的操作,将it解引用并循环输出值。s1.end()函数指向的是结尾的位置,而结尾的位置是一个理论位置不希望被解引用,所以while循环的继续条件为it!=s1.end.

                 std::rbegin与std::rend     

             

        使用rbegin与rend的函数,必须使用reverse_iterator(反向迭代器)类型的变量进行匹配。

        string:capacity接口函数

                string:size与string:length:

        都是用来返回字符串的长度,只是名字上有所差别本质没有区别。

        

                string:resize

                resize可以用在增加或缩短string中有效数据的长度。

        

                string:capacity

       用来返回当前string对象的可用内存容量。

       

                string:reserve

        reserve用来调整string对象的容量大小。

        从上图可以看到使用reserve修改对象的数据容量,是否具体真的执行是看编译器的,当第二次为缩小s1的容量时并没有发生变化。

        

        string:clear

        用来清理string对象的内容

        string:Modifiers接口函数

                string:push_back与string:pop_back

        push_back:从string对象的结尾插入一个字符。

        pop_back:从string对象的结尾('\0'之前)删除一个字符。

                string:append

                        1.string& append (const string& str):使用已有的string对象数据拓展自身对象数据。

                

                2.string& append (const string& str, size_t subpos, size_t sublen):截取string对象中的一部分内容到自身内容后.

                3.string& append (const char* s);将一串字符串添加到自身内容后

                4.string& append (const char* s, size_t n);将字符串从头开始的一部分数据添加至自身内容后。

                string:operator+=

                        1.string& operator+= (const string& str):+=一个string对象

                        2.string& operator+= (const char* s);+=一个字符串

                        3.string& operator+= (char c);+=一个字

       从operator+=的运算符重载可以看出operator+=运算符同时支持push_back以及append的操作,所以建议使用operator+=操作简便还容易懂。

                string:replace

                1.string& replace (size_t pos, size_t len, const string& str)

                2.string& replace (size_t pos, size_t len, const char* s);

                3.string& replace (size_t pos, size_t len, const char* s);

                

                4.string& replace (size_t pos, size_t len, const char* s, size_t n);

               
                string:swap

               
                string:insert

                        1.string& insert (size_t pos, const string& str);

                        2.string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);

                        3.string& insert (size_t pos, const char* s);

                

                4. string& insert (size_t pos, size_t n, char c);

                string:erase

        

        string:operations接口函数:

                string:c_str:

                string:find

                        1.size_t find (const string& str, size_t pos = 0) const;

                        2.size_t find (const char* s, size_t pos = 0) const;

   

                

                        3.size_t find (char c, size_t pos = 0) const;

        string:substr:    

Non-member function overloads接口函数      

        string:relational operators  

        

        注意这里比较操作是按照字符的ASCII值进行单个比较,并不是对两个对象的长度或者容量比较。

        string:operator>>

       string:operator<<

         string:getline:

                                                                                            ————那么文章到这就结束了,感谢各位观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值