作者:几冬雪来
时间:2023年7月7日
内容:C++——string内容讲解
目录
前言:
1.string:
1. reserve:
2.resize:
3.assign:
4.insert:
5.erase:
6.replace:
7.find:
结尾:
前言:
在上一篇博客中,我们讲解了string里面一部分指令的用法,类似计算长度,计算最大长度等等。那么今天我们就继续对其深入了解string的其他指令吧。
1.string:
1. reserve:
接下来我们来讲解的是string中的reserve指令,这个指令看着和我们的reverse(反转)十分相似。
但是其实它们的作用不相同。reserve的作用是——保留。
它可以对我们的容量进行改变。
类似上面的这段代码我们就用到了reserve来进行创建容量为100的空间。
这种开空间的方法适用于——我们知道自己想开空间的大小,然后直接开出它的空间,这样就不用扩容的步骤了。
当然这里要注意我们虽然在VS2019中开辟了大小为100的空间,但是实际上我们开辟的空间有可能大于100。
像这里我们的编译器就开辟了大小为111的空间。
不过这种情况每个编译器都不一样。
如果我们在Linux平台底下用上面这种形式开辟100的空间,那么它就正儿八经的开辟100的1空间给我们。
当然这里我们还有缩容的操作,但是它并不具有约束力。
2.resize:
在上面我们的reserve是用于开空间。
这里我们的resize和reserve一样可以开空间,同时我们的resize在开空间后也可以进行填值初始化。
而我们的就用的resize开辟了大小为100的空间。
但是我们的resize会对其进行初始化,如果我们不填什么数据的话,这里默认我们初始化的值为0。
同样的我们也可以往s1中填充我们的数据。
像这样就可以进行数据的填充了。
既然涉及到了数据的填充,那么肯定少不了空间不够需要扩容的问题。
如果空间不够的话,它会对空间进行相关的处理后将值填上。
如果当我们想resize想取出的数据小于我们的开辟的空间它会怎么样。
这个地方如果像我们最下面想要取20个空间的数据的话。
这个地方它的数据会进行删除,删剩下20个值的空间。
但是要记住我们这里删除数据并不等于缩容,它的容量还是不变的。
3.assign:
接下来要介绍的是我们的——assign指令。
assign指令归类在append和+=的范畴当中,但是assign又和它们有些不同。
在我们了解到现在,append和+=都是在后面添加我们想要的内容,但是assign在这里有赋值的意思。
就像这里,append指令在s1原有的基础上后边添加了我们想要的内容。
而assign则是将s1的内容都更改为其他的内容,这也和C语言中的赋值操作十分的相似。
4.insert:
下来是我们的insert指令。
insert指令是指在原空间的某个位置插入输入的值。
就像上图一样,一开始在0和5的位置分别插入了"hello"和" world"。
并且也能选择在0处规定多少个字符将其输出。
而且这个指令我们也可以用迭代器来将其实现。
这个地方我们就可以用s1.begin来对空间的头处插入想要的字符。
有人就要问了:迭代器这样操作的话,只能在头部插入字符是不是太费了?
那就要看看第二条迭代器的指令。
众所周知迭代器类似指针,所以只要在s1.begin后加上要跳过的个数即可在中间插入想要的值。
insert如此之好用,但是在现实中我们的insert指令却是很少的被使用到。
5.erase:
然后是我们的——erase指令。
它代表的意思是从某个位置开始,删除n个字符。
既然要给删除字符的个数,那肯定少不了删多了又或者不删除的情况,那么这种情况下编译器又是怎么应对的。
像这里我们给一串字符。
如果想要从第5个位置开始,删除一个字符的话就使用erase(5,1) 来进行删除。
要是我们想将第5个位置后面的字符一个不剩的全部删掉的话,这个地方我们就只是传开始删除的位置就行,删除的个数不用写出来。
一样的这个指令也可以用迭代器来实现,但是日常这个指令用的比较少,因为效率低。
6.replace:
这里的replace的意思的替换。
意思就是把某个位置开始的n个字符进行替换,替换的大小写在我们最后面。
这里我们就成功的将第6个位置后面的5个字符替换成为了我们的"xxxxxxxx"。
同样的替换的"xxxxxxxx"可以缩小为2个甚至3个。
要被替代的字符个数自己也可以选择。
但是这个指令并不经常用到,因为在替换时候所替换的字符的个数不同,空间要进行扩容和删除,这也就导致了效率的降低。
7.find:
接下来的指令就是我们的find指令。
相信学习过英文的同学都知道find的意思就是查找。
那我们的find指令通常在哪里使用呢?
类似上图这种要将一个网站链接分为几个部分的时候就会用到我们的find指令。
像上图我们将find的字符或者字符串交给pos1或者2中,然后进行判断(npos是静态成员),接下来再将其打印出来。
如果在第一次寻找过后我们再从头开始找'/'前的数据的话我们会停在"https:"中,因此在find的时候我们要标明起始位置。
但是在最后一次的时候我们只需要打印出剩下的数据就行,因此不用再次进行find。
如果我们想要从后往前进行查找的话,这里就要谈到我们的——rfind。
这里rfind的用法和作用和find十分相似这里就不讲解了。
结尾:
到这里我们的string的一小部分的指令,接下来我们将介绍和学习更多的有关string有关的指令,最后希望这篇博客能给学习的同学带来帮助。