C++ String类的基本使用

这篇具有很好参考价值的文章主要介绍了C++ String类的基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


绪论

        放弃时间的人,时间也会放弃他。——莎士比亚 ; 本篇章是关于string类内一些函数的介绍以及使用方法,都是我们编程必须掌握的基础!

C++ String类的基本使用,C++,c++,开发语言

全文共7000字左右.

话不多说安全带系好,发车啦(建议电脑观看)


附:红色,部分为重点部分;蓝颜色为需要记忆的部分(不是死记硬背哈,多敲);黑色加粗或者其余颜色为次重点;黑色为描述需要


思维导图:

C++ String类的基本使用,C++,c++,开发语言

要XMind思维导图文件的话可以私信哈


目录

1.STL

2.string以及string的基本使用

2.1string的构造函数

2.2sting的赋值运算符重载 

2.3string的append追加函数

2.4 string的+=运算符重载

2.5string的operator[ ]运算符重载

2.6迭代器iterator​编辑

2.6.1逆向迭代器reverse_iterator

2.6.2 const_迭代器

3.string类对象的容量操作的接口函数

3.1reserve

3.2resize

3.3strink_to_fit

4.对string空间的元素访问的接口函数

4.1operator[]

5.修改string的内容的接口函数

5.1assign

5.2insert

5.3erase

6.对字符串操作的一些接口

6.1c_str

6.2find

6.3rfind

6.4 find_first_of 、find_last_of

7.string中的非成员函数重载

7.1一些常用的运算符函数重载

7.1.1比较类运算符重载

7.1.2string的 operator +

7.1.3 getline

7.2 把字符串与其他类型的相互转换


1.STL

知识点:

STL:是C++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包罗数据结构与算法的软件框架。

  • STL有好几个版本:
  1. 原始版本,由惠普实验室的两位大佬完成的(也称为 HP 版本)
  2. P.J. 版本 : 它是由P.J. Plauger 开发完成的。继承自HP版本,后主要被微软使用,缺点:可读性低,符号命名奇怪
  3. RW 版本 ,后面因为竞争不过微软而倒闭(就不过多叙述)
  4. SGI 版本,继承自 HP 版本 ,被GCC(Linux)采用,可移植性强,命名风格和编程风格都比较好 , 有着良好的阅读性,后面我们主要学习这个版本的STL源码 
  • STL的六大组件
  1. 算法(swap、find、sort ...)
  2. 容器(数据结构)(string、vector、list、map ...)
  3. 迭代器(iterator、const_iterator 、....)
  4. 配接器(stack、queue、...)
  5. 空间配置器(内存池)(allocation)
  6. 仿函数(less、greater)

2.string以及string的基本使用

知识点:

string他像是一个数据结构,管理其字符串的增删查改

细节:

我们在学习的时候就主要学习其中比较重要的部分,因为对于这些库实现的是比较全面,可能有过多的分支,我们并不需要全部掌握,因为学的过多也不一定好事,我们只需要大概的有个印象即可,到时候假如要用到的时候,我们可以去查文档。

这里推荐一个可以查看c++文档的网址:https://cplusplus.com


本章主要通过代码实例的形式去掌握语法,我们需要多去使用这样才能更好的去记住他们

其中以下函数的使用方法和正常创建的类对象中的函数的使用方法是一样的,可以把 string 看成是一个类。


2.1string的构造函数

C++ String类的基本使用,C++,c++,开发语言

从上图可以发现,string的构造函数在库中重载的实现了很多种(后面还有许多的函数他们同样也都是重载了许多函数,并且其参数也差不多所以我们能类比的进行学习),他们都有对应的应用场景,我们可以根据不同的情况去对应着使用(但没必要全部都熟系掌握)

功能:初始化对象

用法如下(请单击图片放大观看):

C++ String类的基本使用,C++,c++,开发语言再通过实操来对其进行掌握(建议自己看后再写一遍),具体如下:

 #define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;

int main()
{
    string st;//构造为空
    
    string st1("hello world");//将hello world字符串给对象
    
    string st2(st1);//拷贝构造st1给对象
    
    string st3(st1, 6, 5);//从st1 的下标为6的位置处向后的5个字符给对象
    
    string st4(st1, 6);//在第三个参数有缺省值,所以不一定需要写第三个参数npos是一个无符号的-1也就是整形的最大值,并且规定了此处的构造函数当npos的长度大于字符串的长度就会直接打印剩下的全部
    
    string st5("hello world",5);//提取c字符串中的前5个元素给对象

    string st6(10, ' * ');//创建10个*给对象


    cout << st <<endl;
    cout << st1 <<endl;
    cout << st2 <<endl;
    cout << st3 <<endl;
    cout << st4 <<endl;
    cout << st5 <<endl;
    cout << st6 <<endl;

}

 运行结果:C++ String类的基本使用,C++,c++,开发语言


附:string的析构函数接口并不用调用,程序结束自动归还操作系统,所以就不写了


2.2sting的赋值运算符重载 

C++ String类的基本使用,C++,c++,开发语言

功能:给类对象进行赋值操作

用法:对应着重载函数如下代码:

    string st7("张三");
    string st8("李四");
    cout << st7 << endl;
    
    st7 = "张三丰";//赋值成一个字符串
    cout << st7 << endl;



    st7 = 'z';//赋值为一个字符
    cout << st7 << endl;
    

    st7 = st8;//拷贝构造
    cout << st7 << endl;

运行结果:C++ String类的基本使用,C++,c++,开发语言​​​​(可以把它当成内置类型一样的去使用)。


2.3string的append追加函数

C++ String类的基本使用,C++,c++,开发语言

功能:其重载的函数的大概用法和前面的构造函数重载的差不多,只不过此处是追加(就不一 一展示了,主要还是用到第3个,在this指针指向的对象后面追加字符串)。

具体如下:C++ String类的基本使用,C++,c++,开发语言


2.4 string的+=运算符重载

C++ String类的基本使用,C++,c++,开发语言

功能:也是一个追加类型的函数(他比追加函数更加好用,一般就用+=替代append)

用法如下:

C++ String类的基本使用,C++,c++,开发语言

附:并且对于上面这些在后面增加字符的情况都不需要我们去判断是否需要扩容,编译器都会帮我们自动完成当申请空间不够时的扩容。


2.5string的operator[ ]运算符重载

C++ String类的基本使用,C++,c++,开发语言

功能:通过operator[ ] 运算符 ,我们就能自由的访问到对象字符串中的各个元素了。

具体如下:

C++ String类的基本使用,C++,c++,开发语言

附:

其中注意的是st.size()他和strlen() 用法是一样的都不算\0的,

并且因为其返回值是其引用,所以对于使用[ ]时我们就能去改变其中字符串的内容

如下:此时我们用的就像内置类型一样,但是我们始终要记得他们底层是不一样的!C++ String类的基本使用,C++,c++,开发语言


2.6迭代器iterator

  • 迭代器类似于一个指针,可以用于任何容器,并且能对容器内的数据进行访问和修改C++ String类的基本使用,C++,c++,开发语言
  • 对此就要提之前讲过的范围for,其实范围for的底层就是用迭代器来实现的,所以说只要容器满足迭代器就能使用范围for。C++ String类的基本使用,C++,c++,开发语言
  • 对于算法来说他的本质是对数据进行修改的(排序的),但是因为容器(数据)类的对象都是私有的所以为了使用到其内部的数据,就需要借用迭代器。 
  1. 证明其容器能使用迭代器C++ String类的基本使用,C++,c++,开发语言
  2. 对此因为满足迭代器所以就能去用算法和范围for(reverse逆置算法的参数需要左闭右开的数据)C++ String类的基本使用,C++,c++,开发语言

 附:C++ String类的基本使用,C++,c++,开发语言

其中的begin、end是用来找到字符串对象的开始和结尾的并且返回迭代器类型。C++ String类的基本使用,C++,c++,开发语言C++ String类的基本使用,C++,c++,开发语言


2.6.1逆向迭代器reverse_iterator

其用法几乎一样,但有几点需要去注意一下

在写开始的时候就需要用rbegin,结束处为rend,这样就能从后往前找数据C++ String类的基本使用,C++,c++,开发语言

此时能很好的看出begin(rbegin)指向闭区间,而end(rend)指向开区间(没用的空间),所以对于逆向迭代器来说此时范围for就不行了,因为范围for的底层是一个正向的迭代器

具体如下:

C++ String类的基本使用,C++,c++,开发语言


2.6.2 const_迭代器

下面通过实际情况来进行对const_迭代器的解释:

此处出错的原因是因为传来的st是用const类型接收的所以不能用常规的迭代器const修饰即(对象是一个const类型时就需要用const_iterator)

C++ String类的基本使用,C++,c++,开发语言

此时就需要使用到const迭代器:

C++ String类的基本使用,C++,c++,开发语言

若是逆序的迭代器同理需要用加上const

C++ String类的基本使用,C++,c++,开发语言

下面是一些会更加具体的去写string


3.string类对象的容量操作的接口函数

知识点:

string并不属于容器,而是在标准库中的(因为string产生的比stl更早C++ String类的基本使用,C++,c++,开发语言

  • 在stl中的数据个数用size表示,而在string是用来表示字符串的所以其表示长度用length,但是为了统一以及不修改源码(不删除length)的情况下,string下就既有size()又有length(),对此我们建议用size,size在其他容器中也有。size和length的用法是一样的,就是直接对象.size() /  对象.length()。
  • max_size();  函数是查看最大长度,但是因为不同编译器下用的版本不同就导致了其最大长度是不一样的这个接口对于我们的使用无意义基本不用。
  • 同样的capacity()函数也是在不同编译器下是不同的,并且增长也会不同(在vs(PJ)下基本是1.5倍增长,Linux(SGI)下是2倍增长)
  • clear( )函数(清理string中存的数据):把size变成0,capacity不变

细节:

3.1reserve()

C++ String类的基本使用,C++,c++,开发语言

功能:对string的容量进行自行的确定(可以申请空间也能缩小空间),一般应用于当我们知道需要用到多大的空间处,就能直接一次性的开辟怎么大的空间,避免再每次不够了再进行扩容(能一定的提高效率),并且此时申请的空间会大于等于所要申请的空间(像vs环境下就会多开一段,而centos7下就刚好和申请的空间一样)

具体如下:

在vs环境下进行开辟空间:

C++ String类的基本使用,C++,c++,开发语言

在Linux下:

C++ String类的基本使用,C++,c++,开发语言​当缩小空间时,是否会缩小的空间,看的是容器中是否还有数据,若有则不会缩小:

C++ String类的基本使用,C++,c++,开发语言

反之则缩:

C++ String类的基本使用,C++,c++,开发语言


3.2resize()


C++ String类的基本使用,C++,c++,开发语言

功能: 既能去申请空间,并且可以对申请的空间进行初始化(默认初始化为\0)

具体如下:

C++ String类的基本使用,C++,c++,开发语言

也可以指定初始化(也就是第二个重载函数的意义):

C++ String类的基本使用,C++,c++,开发语言

当他缩小空间时,他会先把超过范围的数据不算在内用\0隔开(相当于后面的数据给你删了):

C++ String类的基本使用,C++,c++,开发语言

附:综上所述,对于缩容情况来说,一般都是不会进行的,除了clear清除数据后的reserve缩容才进行了缩容,主要原因是缩容的效率是挺低的(它需要去先移动缩容后剩下的数据到新的空间处再进行把原位置的空间进行释放),并且现在的内存也挺多的并不会去怕内存不够这种情况所以就不为了内存而降低效率所以一般是不会缩容的。


3.3strink_to_fit()

功能:一个主动缩小空间的接口,将capacity减到合适的大小,一般把capacity减小到size大小或者比size大一些的值 (但注意他也并不一定会缩小这是给编译器一个建议)

C++ String类的基本使用,C++,c++,开发语言


4.对string空间的元素访问的接口函数

4.1operator[]

C++ String类的基本使用,C++,c++,开发语言

功能:可以直接当成数组一样的去访问其string内部的元素,在上面已经实现过来就不再过多赘述了

他还可以用来访问了元素然后进行修改,具体如下:

C++ String类的基本使用,C++,c++,开发语言

当越界时会报出断言错误,而at()接口(其用法和 [ ] 一样就不写了用处也不大,有兴趣的可以查一下文档)则会报出异常错误。


5.修改string的内容的接口函数

5.1assign()

C++ String类的基本使用,C++,c++,开发语言

功能:进行赋值操作,将string内原有的值覆盖掉。

具体如下:
C++ String类的基本使用,C++,c++,开发语言

但其实我们平常并不喜欢用  而是喜欢直接用重载操作符 = ,但他完成一些=运算符重载函数完成不了的赋值方法如:上面的第2、4、5、6 的重载函数,此时他们有多个参数完成(而对于运算符=他只能有两个操作数)


5.2insert()

C++ String类的基本使用,C++,c++,开发语言

功能:在指定pos位置处插入数据

具体如下:

C++ String类的基本使用,C++,c++,开发语言

当要注意insert不要多用,其在非尾部插入效率都是比较低的 


5.3erase()

C++ String类的基本使用,C++,c++,开发语言

功能:对指定位置处删除len个字符(若不写len则删除指定位置及其后面的所有字符因为缺省参数npos是一个非常大的值(整形最大值)

具体使用:

C++ String类的基本使用,C++,c++,开发语言

C++ String类的基本使用,C++,c++,开发语言

附:replace()是一个交换函数接口可以把指定的数据改变成想要的数据,但该函数接口并不常用,所以就不写了想了解可以查一下文档

5.4swap()

C++ String类的基本使用,C++,c++,开发语言

swap交换函数不仅仅在函数中已经存在,而且在String中也单独提供了一份

对于库中的swap它是将数据进行交换,这样要在创建一个临时变量,并且还要进行3次拷贝构造

而string中的swap它的原理是将 _str的地址、_size、_capacity 进行交换那么就很好的俭省拷贝的消耗

并且在全局中也定义了一个swap函数C++ String类的基本使用,C++,c++,开发语言

这是为了避免调用到库中的swap(库中的swap是以模板来创建的,此处的类型为string会优先调用)而这个函数内部又会调用string内部的swap


6.对字符串操作的一些接口

6.1c_str()

C++ String类的基本使用,C++,c++,开发语言

功能:该函数是用来直接指向顺序表中的数组的(string实际是用一个顺序表来实现的)

C++ String类的基本使用,C++,c++,开发语言C++ String类的基本使用,C++,c++,开发语言

有了这个函数就能去和c的接口函数合否则是c无法识别string类型的(因为有些C语言地方他只能和内置类型去对接 (FILE * fopen ( const char * filename, const char * mode );))


6.2find()

C++ String类的基本使用,C++,c++,开发语言

功能:从pow位置开始往后查找字符串/字符,并且返回第一次出现时的位置,若没找到则会返回npos(整形最大值)

具体使用方法如下:

补充一个函数接口:substr() 

C++ String类的基本使用,C++,c++,开发语言

功能: 他能从指定pos位置开始往后len个字符的字符串放到string内并把这个string返回。

下面用这个两个函数来实现把一个网址划分成协议、域名、资源名(动态版无论什么网址都能进行分隔)

C++ String类的基本使用,C++,c++,开发语言

    1 #include<iostream>                                                                                                                    
    2 using namespace std;
    3 
    4 int main()
    5 {
    6     string s = "https://legacy.cplusplus.com/reference/string/string/find/";
    7     
    8     string protocol; 
    9     
   10     size_t pos1=  s.find("://");
   11     if(pos1 != s.npos)
   12     {
   13         cout << s.substr(0,pos1) << endl;//参数pos1表示的是个数此时从0位置开始到pos1个就刚好是协议名
   14     }
   15 
   16     string domain;
   17     string uri;
   18     int pos2 = s.find('/',pos1+3);//可以确定开始的位置
W> 19     if(pos2 != s.npos)
   20     {
   21         cout << s.substr(pos1+3,pos2-(pos1+3)) << endl;
   22         cout << s.substr(pos2+1) << endl;
   23     }
   24     return 0;
   25 }

C++ String类的基本使用,C++,c++,开发语言

6.3rfind

C++ String类的基本使用,C++,c++,开发语言其功能和find几乎一样只是反过来从后面往前找字符/字符串,就不赘述了。

6.4 find_first_of 、find_last_of

find_first_of:

功能:是在对象字符串中从前往后查看是否有参数中的字符(返回第一次出现的下标位置),若果有就返回其下标位置,若没有则返回npos

具体如下:C++ String类的基本使用,C++,c++,开发语言

find_last_of :

功能:和 find_first_of 一样只不过此时是从后往前找


附还有类似相反的函数:find_first_not_of 以及  find_last_not_of :: 他们是用来查找参数字符中没有出现过的返回其下标、last同样只是反过来了从后面往后查找而已,同样当没有时就会返回npos

C++ String类的基本使用,C++,c++,开发语言

但其实他们都没有非常的有用,我们只需要了解一下,有函数能查找在字符串中出现、查找字符串中没出现过的字符(在参数字符串中的会一 一进行查找,当出现时就会返回第一次出现的字符的下标)


7.string中的非成员函数重载

7.1一些常用的运算符函数重载

知识点:

7.1.1比较类运算符重载

C++ String类的基本使用,C++,c++,开发语言功能:在String中已经重载其比较的重载运算符,所以我们就直接使用这些来比较即可能直接当成内置类型一样的来使用(不过要注意的是其比较的底层还是重载运算符以及是用ASCII码来对应着比较的

具体如下:

C++ String类的基本使用,C++,c++,开发语言

附:虽然string中有compare()比较函数但是,他并没用下面的这种方式好用就不去讲他了,主要就写下面这种运算符重载的方法。


7.1.2string的 operator +

C++ String类的基本使用,C++,c++,开发语言

功能:用法很简单,因为string他已经帮我们实现好了,所以只需要去直接用就好,就像内置类型的加法一样,他并不会改变加的变量,只是用该变量返回加好后的值(此处的加就是加上字符/字符串)。​不要过多的使用因为其是传值返回(需要创建临时变量并且返回的话要创建临时变量空间tmp来中转返回)

具体如下:

C++ String类的基本使用,C++,c++,开发语言


7.1.3 getline

C++ String类的基本使用,C++,c++,开发语言功能:读取一行的数据,遇到\n才会停止 

在有些编译器下需要加上头文件:#include<string>

实例:一般用于当字符串中用空格分隔时,cout 、 printf 他们不能直接读取字符串时

具体如下:
C++ String类的基本使用,C++,c++,开发语言C++ String类的基本使用,C++,c++,开发语言


7.2 把字符串与其他类型的相互转换

C++ String类的基本使用,C++,c++,开发语言功能:用来将字符串和其他多种字符进行转换的。

stoi把字符串转化成整形,stol :...  长整形 ...   、to_string把某类型转化成字符串

重载函数如下:

C++ String类的基本使用,C++,c++,开发语言C++ String类的基本使用,C++,c++,开发语言

其中to_string很简单就不讲了(看下面的例子就能看懂);那stoi举例(把字符串转化成整形)其中第一个参数是字符串,idx是表示从字符串的那个下标开始往后转换,而base表示的是转换成几进制的整形(后面的两个参数一般是不用管的)。

具体如下:

C++ String类的基本使用,C++,c++,开发语言


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量C++细致内容,早关注不迷路。文章来源地址https://www.toymoban.com/news/detail-700740.html

到了这里,关于C++ String类的基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【C++】string的基本使用

    【C++】string的基本使用

    从这篇博客开始,我们的C++部分就进入到了 STL , STL的出现可以说是C++发展历史上非常关键的一步,自此C++和C语言有了较为明显的差别 。那么什么是STL呢? 后来不断的演化,发展成了知名的两个版本, 一个叫做P.J.版本,我们的VS系列就是用的这个版本 ,还有一个叫做 SGI版

    2024年01月20日
    浏览(8)
  • 【C++】string类的深入介绍

    【C++】string类的深入介绍

    作者:爱写代码的刚子 时间:2023.5.26 本篇博客主要深入介绍string类、string类的常用接口及操作,string中迭代器的使用,以及string中的部分方法。(由于篇幅有限,剩余方法以及string的深浅拷贝将在之后的博客介绍) 前言:C语言中,字符串是以’\\0’结尾的一些字符的集合,

    2024年02月08日
    浏览(10)
  • 【C++】string类的模拟实现

    【C++】string类的模拟实现

    前言:在上一篇中我们讲到了string类的使用方法,今天我们将进一步的去学习string类,去底层看看它顺带模拟实现部分的内容。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C++学习 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博主和博主一起学习!一起努

    2024年03月21日
    浏览(10)
  • 【C++】String类的模拟实现。

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++初阶 🎉代码仓库:小智的代码仓库 string类中需要三个成员变量分别记录元素个数、容量和内容。还需要一个 size_t 类型npos-1表示整型的最大值。 这段代码是 string 类的构造函数。构造函数是在

    2024年02月13日
    浏览(9)
  • 【C++】string类的基础操作

    【C++】string类的基础操作

    💗个人主页💗 ⭐个人专栏——C++学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读 1. 基本概述 2. string类对象的常见构造 3. string类对象的容量操作 4. string类对象的访问及遍历操作 5. 迭代器 6. string类对象的修改操作 6.1 基本修改操作 6.2 c_str()函数 6.3 find + npos、rfind和

    2024年03月11日
    浏览(10)
  • C++中string类的常用函数

    C++中string类的常用函数

    引言:在C语言中对于字符串的一些操作,例如在字符串末尾增加字符,对字符串拷贝等,我们可以通过调用库中函数来完成这些操作,在C++中,我们把这些常规操作封装成了string类,可以通过类对象直接调用这些函数,使得更加符合了面向对象的思想。 作用:返回字符串的有效字符长度

    2024年02月08日
    浏览(12)
  • 【C++】string类的深浅拷贝问题

    【C++】string类的深浅拷贝问题

    我们知道,定义一个类的时候,如果我们没有写构造,拷贝构造,赋值运算符重载,析构方法的话,编译器会自动生成。当该类成员中涉及到资源的管理时,实现的就是浅拷贝。所以,以上这几种方式是必须要程序猿手动实现的。 举例来看: 图中所示:实现了构造和析构,

    2023年04月26日
    浏览(11)
  • C++ 之 string类的模拟实现

    C++ 之 string类的模拟实现

    这学习我有三不学 昨天不学,因为昨天是个过去 明天不学,因为明天还是个未知数 今天不学,因为我们要活在当下,我就是玩嘿嘿~ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

    2024年04月27日
    浏览(6)
  • 【C++】——string类的介绍及模拟实现

    【C++】——string类的介绍及模拟实现

    C语言中,字符串是以’\\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。所以我们今天来学习C++标准库中的string类。

    2024年02月07日
    浏览(16)
  • 【C++初阶】string 类的认识与学习

    【C++初阶】string 类的认识与学习

      在学习string类之前,先在这里推荐2个好用的网站,可以用来查阅C++的相关知识 https://cplusplus.com https://en.cppreference.com/w/ 上面的是非官方的,下面的官方的,但是个人感觉还是上面的好用。 简单来说, string 是C++中用来管理字符串的类。 他有很多接口,大致分为: 1.string类

    2024年02月09日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包