我们以前处理字符串都是用char*,而当学了string之后,我们会果断使用这个来处理字符串,因为这个是真的很简便啦!

目录

string类的优点:

基础篇:

声明一个string字符串(代码演示)

生成一个空字符串

为字符串赋初值

用C语言里的字符串s作为str的初值

 生成一个字符串,包含n个字符c

 复制构造函数

 成员函数(字符串的容量)

获取字符串的字符数

获取可以处理的最大字符数

 /获取字符串对象目前的容量

判断字符串是否为空

 清空字符串对象

调整字符串对象的大小

成员函数(操作字符串中的元素)

操作字符串中指定位置的字符

重点篇

字符串的连接(三种方法)

字符串的比较(两种方法) 

字符串的查找(三种方法)

字符串的替换(三种方法) 

/字符串的插入(两种方法)

 字符串的删除

提取子串


string类的优点:

不用担心内存是否够用(即字符串的长度)

不用考虑字符串结尾的空白符(即'\0')

它可以很灵活的处理字符串操作,也可以作为C++的数据类型。

基础篇:

声明一个string字符串(代码演示):

//生成一个空字符串

string str;   //生成一个空字符串str

 C++ string类总结

//为字符串赋初值

 string str="1234567";

或string str("1234567");

C++ string类总结

//用C语言里的字符串s作为str的初值

string str(const char*s);

 C++ string类总结

 //生成一个字符串,包含n个字符c

string str(size_type n,char c);   //假如 n=3,就相当于 str="ccc"

C++ string类总结

 //复制构造函数(const的作用是防止成员函数str改变str2的值

string str(const string &str2);   //将str2赋值给str,即str=str2

C++ string类总结

 成员函数(字符串的容量):

//获取字符串的字符数

size();//等同于length

C++ string类总结

//获取可以处理的最大字符数

 max_size();   //无论它是空字符串还是不是空字符串,最大字符数都是一样的

 C++ string类总结

可以看到这个数很大,也就是说对象str真的可以处理这么多个字符,但是你的电脑未必有这么大的内存可以给它保存这么多个字符,所以这只是一个理论值。

 //获取字符串对象目前的容量

capacity();  //单位是字符

C++ string类总结

可以看到size的值变了,但是容量没有变。

原因:字符串的容量实际上就是字符串对象内部的数组的大小,而字符串对象修改字符串是需要时间给CPU运算的,每次都重新创建数组然后再修改的话,是非常低效率的,成员函数size()的作用就是获取字符的数量,而成员函数capacity()的作用就是让使用者知道,你的字符串对象的容量是这么多,在这个大小的容量范围内处理字符串是很快的,但是如果超过了这个容量的话,就需要重新创建一个更大容量的数组,并且大部分情况下,还要把旧数组中的数据复制到新数组中去,由于要复制数据,所以在字符串对象内部扩充容量的时候,CPU会有额外的运算,会额外消耗一点时间。所以简单点说,就是这个容量一旦分配好,是不会轻易改变的,所以也尽量不要超过这个容量。

//判断字符串是否为空

empty();   //其功能就是如果没有字符就返回1,有字符就返回0

C++ string类总结

 //清空字符串对象

clear();   //这里有两种清空方法

C++ string类总结

可以看到两个字符串都被清空了。

//调整字符串对象的大小

resize(大小);  

resize(大小,字符);   //对于这种情况 string str3="12345";
                                                           str2.resize(10);  

                                                          //多出来的5个字符用字符类型的默认值(由于其内部是用char来保存字符的,所以字符类型的默认值就是char(),也就是数值0,对应的字符就是空字符)来填充 

 C++ string类总结

成员函数(操作字符串中的元素): 

//操作字符串中指定位置的字符

at(位置);  //相当于[]

C++ string类总结

 但是用at访问和用[]访问还是有区别的。

区别:是否可以检测越界

C++ string类总结

 可以看到:它没有东西输出并且正常的结束了,使用中括号是跟数组是一样的,它们都不检测是否越界

 C++ string类总结

 可以看到:程序崩溃了,因为成员函数at()可以检测是否越界,在越界的时候抛出异常错误,让程序直接崩溃结束掉,及时制止了错误蔓延出去,这样可以防止出现更严重的问题。

具体什么时候用哪个:因为成员函数at()多了一步检测是否越界的操作,所以它的执行速度会比中括号慢一些,当你写代码的时候已经判断过是否越界,例如不修改字符串从第一个字符到最后一个字符循环访问,这个就使用中括号,如果你不确定操作的位置是否越界,那么就用at(),但是这种情况不多,一般像这种不确定的操作,在操作之前都是先用size()判断一下,再使用中括号来访问元素,所以使用成员函数at()的情况很少。

重点篇:

//字符串的连接(三种方法)

string &append(const char *s);

string &append(int n,char c);

string &append(const string &s);

 C++ string类总结

//字符串的比较(两种方法) 

int compare(const string &s) const;

int compare(const char *s) const;

C++ string类总结

//字符串的查找(三种方法)

int find(char c,int pos=0) const;

int find(const char *s,int pos=0) const;

int find(const string &s,int pos=0) const;

//其中的pos为从这个位置(在这里是下标为0的位置,即第1个字符的位置)开始往后查找 

 C++ string类总结

//字符串的替换(三种方法) 

string &replace(int p0,int n0,const char *s);//

string &replace(int p0,int n0,int n,char c);

string &replace(int p0,int n0,const string &s);

//p0表示从该位置(p0只是下标)开始删除n0个字符,然后将字符串替换到这个位置

 C++ string类总结

 //字符串的插入(两种方法)

string &insert(int p0,const char *s);

string &insert(int p0,const string &s);

//在p0(p0只是下标)的位置,插入字符串

 C++ string类总结

 //字符串的删除

string &erase(int pos=0,int n=npos);

//从pos位置(pos只是下标,在这里是从第1个位置开始)开始删除n个字符

C++ string类总结

那个,代码上的那个“第一种“是忘删了哈,可别被这小错误给干扰了。 

//提取子串

string substr(int pos=0,int n=npos) const;

//即从pos位置(pos只是下标,在这里是从第1个位置开始)位置开始提取出来n个字符 

 C++ string类总结

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-30
  • 2021-05-20
  • 2021-10-12
  • 2021-11-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案