Error[8]: Undefined offset: 511, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录

Stl

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

Stl的六大组件

   ( 1 ) (1) (1)算法
   ( 2 ) (2) (2)容器
   ( 3 ) (3) (3)迭代器
   ( 4 ) (4) (4)空间适配器
   ( 5 ) (5) (5)仿函数
   ( 6 ) (6) (6)配接器
目前我们对stl有个了解就好,在后面的学习中我们会逐步加深对其的理解。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

string类

头文件

#include

string属于C++stl库中的一个类,其是basic_string 通过typedef出来的。
string类下含有6个构造函数以及很多的成员函数,接下来我们重点讲解其中常用的函数接口
用的时候别忘了包string的头文件

string类的构成

string的类的成员大致由如下组成:

class string
{
private:
	char _Buf[16];//(1)
	char* _ptr;//(2)
	size_t _mysize;//(3)
	size_t _myres;//(4)
};

   ( 1 ) (1) (1)在string中,当字符串长度小于15的时候就会存在string类下的原生数组中。
   ( 2 ) (2) (2)当字符串长度大于等于16以后,string就会去堆上申请空间,使用_ptr去接收,并且在字符串存储在里面
   ( 3 ) (3) (3)字符串当前的字符个数
   ( 4 ) (4) (4)字符串容量。

string的底层原理

string的底层是一个类模板:

template<class T>
class basic_string
{
	//函数接口....
public:
	T *str;
	//....

};

这里大家可能会好奇,为什么string的类模板是T类型的,string里存储的不都是char类型的字符吗?
在计算机中,程序都是以二进制进行存储的,不同的二进制数字就能代码不同的情况。
而英文中的字符则是以ascill码的形式对应相应的数字,不同的数字对应不同的二进制,因此对于英文只需要一个字节就能存储26个字母对应的ascill码,也就能存储所有的单词组合。
但是计算机是一种全球化的产物,除了需要存储英文,还需要存储中文,日文…。这些语言的组成比较复杂,文字数量庞大,一个字节无法存储下所有情况,所以这些语言大多用两个字节进行存储。
所以有了wchar_t这种可以2个字节的类型。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

迭代器

名称:Iterator
迭代器我们暂时将其看作是一个类似指针的东西,关于迭代器的具体底层原理,在后面我们会详细说明。
迭代器可以用来间接遍历容器,如我们今天的string类。
在C++中,提供了正向迭代器和反向迭代器
正向迭代器含有两个成员函数:

迭代器的统一使用格式:
容器类型::迭代器名称 =成员函数
迭代器该如何使用呢?

	string s1("hello world");
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it;
		it++;
	}

通过迭代器指向字符串的第一个字符
逐步自增直到走到字符串的\0位置。

反向迭代器

string s1("hello world");
	string::reverse_iterator it = s1.rbegin();
	while (it != s1.rend())
	{
		cout << *it;
		it++;
	}

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

常用构造函数接口

常用成员函数接口


ps:size和capacity的区别
size是字符串所能容纳的字符空间。
capacity:系统为字符串分配空间的时候,会多分配一些空间,假设申请100的空间,但是系统可能会分配120,这时size就是100capacity就是120。可以将多出来的那部分看作是备用空间,但是并不是你一定能够使用的。

ps::append有多种重载版本,append同样也可以在字符串末尾加入n个字符,但是我们必须指明是几个字符,如s.append(1,‘a’);//在s字符串末尾加入一个a。

-----------------------------------我是分割线---------------------------------------------

insert

   ( 1 ) (1) (1)insert插入函数
insert可以指定在字符串的某个位置插入字符或者字符串

我们重点讲两种:
   ( 1 ) (1) (1)在指定位置插入字符串。
参数一:插入的位置
参数二:插入的字符串

s1.insert(1,"adc");

   ( 2 ) (2) (2)在指定位置插入n个字符串:
参数一:插入的位置
参数二:插入的字符个数
参数三:要插入的字符

s1.insert(2,5,'c');

除了通过字符下标进行指定位置,还能通过迭代器:

s1.insert(s.begin(),'a');
s1.insert(s.begin(),5,'a');

迭代器的insert重载版本可以不指定插入的字符个数,默认为1。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

erase

   ( 1 ) (1) (1)erase删除函数

共三种版本:
   ( 1 ) (1) (1)指定位置向后删除n个字符。
如果没指定,则会使用默认值nposnpos是一个很大的数字,所以如果没有说明删除几个字符,则默认出该位置开始删除直到字符串末尾。

	string s1("helloc");
	string s2("helloc");
	s1.erase(1);//没指明删除的字符个数,默认用npos
	cout << s1 << endl;
	s2.erase(1,5);

   ( 2 ) (2) (2)传入迭代器
默认删除迭代器位置的一个字符

	string s1("helloc");
	s1.erase(++s1.begin());

也可以指定从迭代器的一个位置开始,另一个位置结束

	string s1("helloc");
	s1.erase(s1.begin(),s1.end());

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

find和rfind

   ( 1 ) (1) (1)find正向查找函数
find函数有两个参数,其既可以查找字符,也可以查找字符串。其返回值为查找位置开始第一次查找的到字符串/字符的位置,没找到即返回npos
参数一:要查找的字符或者字符串
参数二:开始查找的位置(缺省值:默认为0)

	string s1("helloc");
	cout << s1.find('c');
	cout << s1.find('lo,3');

   ( 1 ) (1) (1)rfind反向查找函数
功能和find基本一致,但是是从字符串末尾位置开始向前找字符
返回该字符从后向前找第一个找到的位置。如下面的o的位置就是5。
这个返回位置依旧是按照数据下标0开始计算的。

	string s1("helloc");
	cout << s1.rfind("lo");
	cout << s1.find('o');

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

getline

cin在读取字符串的时候,遇到空格或者回车就会停止读入:
对于"hello world";形式的就无法读入,这时可以使用getline函数
getline遇到回车才会停止读入

getline(cin,字符串名字);

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

子串substr

功能:获取字符字符串的子串,其返回类型是string
两个参数
参数一:字串开始的位置(缺省值为0)
参数二:字串结束的位置(缺省值为npos,如果没写则默认执行到字符串末尾)

int main()
{
	string s1("hello");
	string s2 = s1.substr(1);
	string s3 = s1.substr(2, 3);
	cout << s2 << endl;
	cout << s3 << endl;
}

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

string的两种扩容函数

   ( 1 ) (1) (1)resize(size_t n;char c='.')

s1resize(100,'n');n

  为当前字符串扩容n个字节的空间,并将字符串有效字符个数增加到c,不够的部分用字符' ( 2 ) (2) '进行填充。(没写第二个参数就默认填充);
当resize申请的容量小于当前容量时,其多出来的部门会被舍去。但是其容量不会缩小。

  (2)reserve (size_t n = 0);1.下标索引----[]char
  为当前字符串扩容n个字节的空间,但是不会为新开的空间进行初始化。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

字符串的几种访问方式

&

[ ] operator(size_t)return pos[
{
	] _str;pos}string
[]

2.at类重载了at函数,每次访问该字符串的某个位置,返回的都是该位置的引用,因此我们既可以读字符串的某个位置,还可以对该位置进行修改。

[]
s1是C++以前的产物了,其也能对字符串进行读写 *** 作,与(类似

string "helloc");.at
	s1(0)='a' ;//将字符串0位置的字符修改为'a'at和[]的区别[]:

s1
检查越界的方式不一样:

(断言

string "helloc");<<[
	cout 20 s1];at
    
     
      
       
        (
       
       
        1
       
       
        )
       
      
      
       (1)
      
     
    

:抛异常

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

+=

string类重载了+=运算符。

  (1)+=字符intmain

( );+=
{
	string s1'a'
	s1 ; <<<<
	cout ; s1 } endl
    
     
      
       
        (
       
       
        2
       
       
        )
       
      
      
       (2)
      
     
    

  (2)+=字符串intmain

( );+=
{
	string s1"hello"
	s1 ; <<<<
	cout ; s1 } endl[+++]
[+++]
)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 512, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录

Stl

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

Stl的六大组件

   ( 1 ) (1) (1)算法
   ( 2 ) (2) (2)容器
   ( 3 ) (3) (3)迭代器
   ( 4 ) (4) (4)空间适配器
   ( 5 ) (5) (5)仿函数
   ( 6 ) (6) (6)配接器
目前我们对stl有个了解就好,在后面的学习中我们会逐步加深对其的理解。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

string类

头文件

#include

string属于C++stl库中的一个类,其是basic_string 通过typedef出来的。
string类下含有6个构造函数以及很多的成员函数,接下来我们重点讲解其中常用的函数接口
用的时候别忘了包string的头文件

string类的构成

string的类的成员大致由如下组成:

class string
{
private:
	char _Buf[16];//(1)
	char* _ptr;//(2)
	size_t _mysize;//(3)
	size_t _myres;//(4)
};

   ( 1 ) (1) (1)在string中,当字符串长度小于15的时候就会存在string类下的原生数组中。
   ( 2 ) (2) (2)当字符串长度大于等于16以后,string就会去堆上申请空间,使用_ptr去接收,并且在字符串存储在里面
   ( 3 ) (3) (3)字符串当前的字符个数
   ( 4 ) (4) (4)字符串容量。

string的底层原理

string的底层是一个类模板:

template<class T>
class basic_string
{
	//函数接口....
public:
	T *str;
	//....

};

这里大家可能会好奇,为什么string的类模板是T类型的,string里存储的不都是char类型的字符吗?
在计算机中,程序都是以二进制进行存储的,不同的二进制数字就能代码不同的情况。
而英文中的字符则是以ascill码的形式对应相应的数字,不同的数字对应不同的二进制,因此对于英文只需要一个字节就能存储26个字母对应的ascill码,也就能存储所有的单词组合。
但是计算机是一种全球化的产物,除了需要存储英文,还需要存储中文,日文…。这些语言的组成比较复杂,文字数量庞大,一个字节无法存储下所有情况,所以这些语言大多用两个字节进行存储。
所以有了wchar_t这种可以2个字节的类型。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

迭代器

名称:Iterator
迭代器我们暂时将其看作是一个类似指针的东西,关于迭代器的具体底层原理,在后面我们会详细说明。
迭代器可以用来间接遍历容器,如我们今天的string类。
在C++中,提供了正向迭代器和反向迭代器
正向迭代器含有两个成员函数:

迭代器的统一使用格式:
容器类型::迭代器名称 =成员函数
迭代器该如何使用呢?

	string s1("hello world");
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it;
		it++;
	}

通过迭代器指向字符串的第一个字符
逐步自增直到走到字符串的\0位置。

反向迭代器

string s1("hello world");
	string::reverse_iterator it = s1.rbegin();
	while (it != s1.rend())
	{
		cout << *it;
		it++;
	}

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

常用构造函数接口

常用成员函数接口


ps:size和capacity的区别
size是字符串所能容纳的字符空间。
capacity:系统为字符串分配空间的时候,会多分配一些空间,假设申请100的空间,但是系统可能会分配120,这时size就是100capacity就是120。可以将多出来的那部分看作是备用空间,但是并不是你一定能够使用的。

ps::append有多种重载版本,append同样也可以在字符串末尾加入n个字符,但是我们必须指明是几个字符,如s.append(1,‘a’);//在s字符串末尾加入一个a。

-----------------------------------我是分割线---------------------------------------------

insert

   ( 1 ) (1) (1)insert插入函数
insert可以指定在字符串的某个位置插入字符或者字符串

我们重点讲两种:
   ( 1 ) (1) (1)在指定位置插入字符串。
参数一:插入的位置
参数二:插入的字符串

s1.insert(1,"adc");

   ( 2 ) (2) (2)在指定位置插入n个字符串:
参数一:插入的位置
参数二:插入的字符个数
参数三:要插入的字符

s1.insert(2,5,'c');

除了通过字符下标进行指定位置,还能通过迭代器:

s1.insert(s.begin(),'a');
s1.insert(s.begin(),5,'a');

迭代器的insert重载版本可以不指定插入的字符个数,默认为1。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

erase

   ( 1 ) (1) (1)erase删除函数

共三种版本:
   ( 1 ) (1) (1)指定位置向后删除n个字符。
如果没指定,则会使用默认值nposnpos是一个很大的数字,所以如果没有说明删除几个字符,则默认出该位置开始删除直到字符串末尾。

	string s1("helloc");
	string s2("helloc");
	s1.erase(1);//没指明删除的字符个数,默认用npos
	cout << s1 << endl;
	s2.erase(1,5);

   ( 2 ) (2) (2)传入迭代器
默认删除迭代器位置的一个字符

	string s1("helloc");
	s1.erase(++s1.begin());

也可以指定从迭代器的一个位置开始,另一个位置结束

	string s1("helloc");
	s1.erase(s1.begin(),s1.end());

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

find和rfind

   ( 1 ) (1) (1)find正向查找函数
find函数有两个参数,其既可以查找字符,也可以查找字符串。其返回值为查找位置开始第一次查找的到字符串/字符的位置,没找到即返回npos
参数一:要查找的字符或者字符串
参数二:开始查找的位置(缺省值:默认为0)

	string s1("helloc");
	cout << s1.find('c');
	cout << s1.find('lo,3');

   ( 1 ) (1) (1)rfind反向查找函数
功能和find基本一致,但是是从字符串末尾位置开始向前找字符
返回该字符从后向前找第一个找到的位置。如下面的o的位置就是5。
这个返回位置依旧是按照数据下标0开始计算的。

	string s1("helloc");
	cout << s1.rfind("lo");
	cout << s1.find('o');

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

getline

cin在读取字符串的时候,遇到空格或者回车就会停止读入:
对于"hello world";形式的就无法读入,这时可以使用getline函数
getline遇到回车才会停止读入

getline(cin,字符串名字);

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

子串substr

功能:获取字符字符串的子串,其返回类型是string
两个参数
参数一:字串开始的位置(缺省值为0)
参数二:字串结束的位置(缺省值为npos,如果没写则默认执行到字符串末尾)

int main()
{
	string s1("hello");
	string s2 = s1.substr(1);
	string s3 = s1.substr(2, 3);
	cout << s2 << endl;
	cout << s3 << endl;
}

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

string的两种扩容函数

   ( 1 ) (1) (1)resize(size_t n;char c='.')

s1resize(100,'n');n

  为当前字符串扩容n个字节的空间,并将字符串有效字符个数增加到c,不够的部分用字符' ( 2 ) (2) '进行填充。(没写第二个参数就默认填充);
当resize申请的容量小于当前容量时,其多出来的部门会被舍去。但是其容量不会缩小。

  (2)reserve (size_t n = 0);1.下标索引----[]char
  为当前字符串扩容n个字节的空间,但是不会为新开的空间进行初始化。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

字符串的几种访问方式

&

[ ] operator(size_t)return pos[
{
	] _str;pos}string
[]

2.at类重载了at函数,每次访问该字符串的某个位置,返回的都是该位置的引用,因此我们既可以读字符串的某个位置,还可以对该位置进行修改。

[]
s1是C++以前的产物了,其也能对字符串进行读写 *** 作,与(类似

string "helloc");.at
	s1(0)='a' ;//将字符串0位置的字符修改为'a'at和[]的区别[]:

s1
检查越界的方式不一样:

(断言

string "helloc");<<[
	cout 20 s1];at
    
     
      
       
        (
       
       
        1
       
       
        )
       
      
      
       (1)
      
     
    

:抛异常

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

+=

string类重载了+=运算符。

  (1)+=字符intmain

( );+=
{
	string s1'a'
	s1 ; <<<<
	cout ; s1 } endl
    
     
      
       
        (
       
       
        2
       
       
        )
       
      
      
       (2)
      
     
    

  (2)+=字符串intmain

( );+=
{
	string s1"hello"
	s1 ; <<<<
	cout ; s1 } endl
[+++]
)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
C++ string类_C_内存溢出

C++ string类

C++ string类,第1张

文章目录
        • Stl
        • Stl的六大组件
        • string类
        • string类的构成
        • string的底层原理
        • 迭代器
        • 常用构造函数接口
        • 常用成员函数接口
        • insert
        • erase
        • find和rfind
        • getline
        • 子串substr
        • string的两种扩容函数
        • 字符串的几种访问方式
        • +=

Stl

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

Stl的六大组件

   ( 1 ) (1) (1)算法
   ( 2 ) (2) (2)容器
   ( 3 ) (3) (3)迭代器
   ( 4 ) (4) (4)空间适配器
   ( 5 ) (5) (5)仿函数
   ( 6 ) (6) (6)配接器
目前我们对stl有个了解就好,在后面的学习中我们会逐步加深对其的理解。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

string类

头文件

#include

string属于C++stl库中的一个类,其是basic_string 通过typedef出来的。
string类下含有6个构造函数以及很多的成员函数,接下来我们重点讲解其中常用的函数接口
用的时候别忘了包string的头文件

string类的构成

string的类的成员大致由如下组成:

class string
{
private:
	char _Buf[16];//(1)
	char* _ptr;//(2)
	size_t _mysize;//(3)
	size_t _myres;//(4)
};

   ( 1 ) (1) (1)在string中,当字符串长度小于15的时候就会存在string类下的原生数组中。
   ( 2 ) (2) (2)当字符串长度大于等于16以后,string就会去堆上申请空间,使用_ptr去接收,并且在字符串存储在里面
   ( 3 ) (3) (3)字符串当前的字符个数
   ( 4 ) (4) (4)字符串容量。

string的底层原理

string的底层是一个类模板:

template<class T>
class basic_string
{
	//函数接口....
public:
	T *str;
	//....

};

这里大家可能会好奇,为什么string的类模板是T类型的,string里存储的不都是char类型的字符吗?
在计算机中,程序都是以二进制进行存储的,不同的二进制数字就能代码不同的情况。
而英文中的字符则是以ascill码的形式对应相应的数字,不同的数字对应不同的二进制,因此对于英文只需要一个字节就能存储26个字母对应的ascill码,也就能存储所有的单词组合。
但是计算机是一种全球化的产物,除了需要存储英文,还需要存储中文,日文…。这些语言的组成比较复杂,文字数量庞大,一个字节无法存储下所有情况,所以这些语言大多用两个字节进行存储。
所以有了wchar_t这种可以2个字节的类型。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

迭代器

名称:Iterator
迭代器我们暂时将其看作是一个类似指针的东西,关于迭代器的具体底层原理,在后面我们会详细说明。
迭代器可以用来间接遍历容器,如我们今天的string类。
在C++中,提供了正向迭代器和反向迭代器
正向迭代器含有两个成员函数:

迭代器的统一使用格式:
容器类型::迭代器名称 =成员函数
迭代器该如何使用呢?

	string s1("hello world");
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it;
		it++;
	}

通过迭代器指向字符串的第一个字符
逐步自增直到走到字符串的\0位置。

反向迭代器

string s1("hello world");
	string::reverse_iterator it = s1.rbegin();
	while (it != s1.rend())
	{
		cout << *it;
		it++;
	}

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

常用构造函数接口

常用成员函数接口


ps:size和capacity的区别
size是字符串所能容纳的字符空间。
capacity:系统为字符串分配空间的时候,会多分配一些空间,假设申请100的空间,但是系统可能会分配120,这时size就是100capacity就是120。可以将多出来的那部分看作是备用空间,但是并不是你一定能够使用的。

ps::append有多种重载版本,append同样也可以在字符串末尾加入n个字符,但是我们必须指明是几个字符,如s.append(1,‘a’);//在s字符串末尾加入一个a。

-----------------------------------我是分割线---------------------------------------------

insert

   ( 1 ) (1) (1)insert插入函数
insert可以指定在字符串的某个位置插入字符或者字符串

我们重点讲两种:
   ( 1 ) (1) (1)在指定位置插入字符串。
参数一:插入的位置
参数二:插入的字符串

s1.insert(1,"adc");

   ( 2 ) (2) (2)在指定位置插入n个字符串:
参数一:插入的位置
参数二:插入的字符个数
参数三:要插入的字符

s1.insert(2,5,'c');

除了通过字符下标进行指定位置,还能通过迭代器:

s1.insert(s.begin(),'a');
s1.insert(s.begin(),5,'a');

迭代器的insert重载版本可以不指定插入的字符个数,默认为1。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

erase

   ( 1 ) (1) (1)erase删除函数

共三种版本:
   ( 1 ) (1) (1)指定位置向后删除n个字符。
如果没指定,则会使用默认值nposnpos是一个很大的数字,所以如果没有说明删除几个字符,则默认出该位置开始删除直到字符串末尾。

	string s1("helloc");
	string s2("helloc");
	s1.erase(1);//没指明删除的字符个数,默认用npos
	cout << s1 << endl;
	s2.erase(1,5);

   ( 2 ) (2) (2)传入迭代器
默认删除迭代器位置的一个字符

	string s1("helloc");
	s1.erase(++s1.begin());

也可以指定从迭代器的一个位置开始,另一个位置结束

	string s1("helloc");
	s1.erase(s1.begin(),s1.end());

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

find和rfind

   ( 1 ) (1) (1)find正向查找函数
find函数有两个参数,其既可以查找字符,也可以查找字符串。其返回值为查找位置开始第一次查找的到字符串/字符的位置,没找到即返回npos
参数一:要查找的字符或者字符串
参数二:开始查找的位置(缺省值:默认为0)

	string s1("helloc");
	cout << s1.find('c');
	cout << s1.find('lo,3');

   ( 1 ) (1) (1)rfind反向查找函数
功能和find基本一致,但是是从字符串末尾位置开始向前找字符
返回该字符从后向前找第一个找到的位置。如下面的o的位置就是5。
这个返回位置依旧是按照数据下标0开始计算的。

	string s1("helloc");
	cout << s1.rfind("lo");
	cout << s1.find('o');

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

getline

cin在读取字符串的时候,遇到空格或者回车就会停止读入:
对于"hello world";形式的就无法读入,这时可以使用getline函数
getline遇到回车才会停止读入

getline(cin,字符串名字);

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

子串substr

功能:获取字符字符串的子串,其返回类型是string
两个参数
参数一:字串开始的位置(缺省值为0)
参数二:字串结束的位置(缺省值为npos,如果没写则默认执行到字符串末尾)

int main()
{
	string s1("hello");
	string s2 = s1.substr(1);
	string s3 = s1.substr(2, 3);
	cout << s2 << endl;
	cout << s3 << endl;
}

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

string的两种扩容函数

   ( 1 ) (1) (1)resize(size_t n;char c='.')

s1resize(100,'n');n

  为当前字符串扩容n个字节的空间,并将字符串有效字符个数增加到c,不够的部分用字符' ( 2 ) (2) '进行填充。(没写第二个参数就默认填充);
当resize申请的容量小于当前容量时,其多出来的部门会被舍去。但是其容量不会缩小。

  (2)reserve (size_t n = 0);1.下标索引----[]char
  为当前字符串扩容n个字节的空间,但是不会为新开的空间进行初始化。

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

字符串的几种访问方式

&

[ ] operator(size_t)return pos[
{
	] _str;pos}string
[]

2.at类重载了at函数,每次访问该字符串的某个位置,返回的都是该位置的引用,因此我们既可以读字符串的某个位置,还可以对该位置进行修改。

[]
s1是C++以前的产物了,其也能对字符串进行读写 *** 作,与(类似

string "helloc");.at
	s1(0)='a' ;//将字符串0位置的字符修改为'a'at和[]的区别[]:

s1
检查越界的方式不一样:

(断言

string "helloc");<<[
	cout 20 s1];at
    
     
      
       
        (
       
       
        1
       
       
        )
       
      
      
       (1)
      
     
    

:抛异常

------------------------------------------------------------我是分割线💥💥💥💥💥💥💥💥💥💥------------------------------------------------------

+=

string类重载了+=运算符。

  (1)+=字符intmain

( );+=
{
	string s1'a'
	s1 ; <<<<
	cout ; s1 } endl
    
     
      
       
        (
       
       
        2
       
       
        )
       
      
      
       (2)
      
     
    

  (2)+=字符串intmain

( );+=
{
	string s1"hello"
	s1 ; <<<<
	cout ; s1 } endl

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/756733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存