在c++中字符串类型string的本质是一个类,在这个类中封装了一个指向字符串数组的char*指针
共四种构造函数,其中有三种最经典的 --- 无参,有参,拷贝构造
还有一个是类中自己封装的构造函数 --- 传两个参数一个是整型n,一个是字符c --- 这个构造函数可以将n个字符c初始化到char*指向的字符串数组
char*既可以指向字符串也可以指向字符串数组
在给string中封住的char*指向的字符串数组初始化之后我们还能够进行一系列的赋值操作
string类中封装了三个等号运算符重载来帮助我们赋值
第一个是让一个string = 一个char*指针的赋值方式 --- 除了直接传一个char*指针以外,我们还可以传一个字符串,这是因为字符串的本质是一个char*指针,这个指针指向的是字符串的首字符
第二个是让一个string = 一个string的赋值方式
第三个是让一个string = 一个字符的赋值方式
除了上面这个等号运算符重载的方式赋值以外,我们还可以用string类中的成员方法来赋值
调用的方法是上面的assign方法,然后这个方法有四个函数重载,传不同的参数就相当于给string类中的char*指向的字符串数组赋不同的值
和string字符串赋值一样也分为运算符重载类型和成员函数重载调用类型
注意字符串拼接有两个特点:1.重载的运算符是+=;2.都是在字符串中最后一个字符后面重载;3.调用方法时调用的是string类中的方法时,调用的是append方法
涉及的方法分别是:1.find(第一次的位置)2.rfind(最后一次的位置)3.replace(替换)
1.find函数的返回值 --- 这个返回值返回的是我们要找的字符串出现的位置(准确的来说是找到我们要找的字符串,然后将这个字符串的第一个字符的位置返回),注意位置的索引是从0开始的,也就是说第一个字符对应0,第二个对应1....一直往下
如果没有找到指定字符串的话,这个函数会返回一个 -1
2.rfind和find同理
rfind和find之间的区别:rfind是从右往左查,而find则是从左往右查,然后对于字符串中的字符排序来说,无论是那种查找方式统一规定都是按照从左往右的顺序,从0开始排
3.关于替换的注意事项:注意这里的替换是指将从给定的起始位置和终止位置组成的字符串替换为我们给定的字符串 ---- 这里直接就是字符串替换,不用考虑两个字符串之间的字符数是否相等!
1.这里是将调用比较方法的字符串A和传给方法的字符串参数B做对比,如果A>Bf返回1,小于返回-1,等于返回0
2..这里的字符串之间比较的是字符的ASCII码值逐个对比 --- 两个字符串之间从第一个字符开始比较ASCII码值,如果相等就继续往后比较,直到比较出结果,或者是双方或某一方字符串结束:
一.如果结束的时候,是双方同时结束的话,则返回0相等;如果是某一方字符串结束的话,则判定字符串长的那方更大
二.如果是判定出结果的话,字符的ASCII码值大的那方判字符串更大
3.中文字符串应用这个比较函数的时候,常常是用来判断字符串是否相等的,对于判断两个中文字符串谁大谁小几乎不用
第一种方式是通过重载下标访问运算符来取字符,string调用这个方法的时候就相当于
string[ int n ]
第二种方式则是通过内置成员方法 at 获得
注意无论是那种读取方式,string类中的char*指向的字符串数组中的元素都是按照从左往右的顺序从0开始排列
这两种访问方式既可以进行读操作也可以进行写操作
注意这里是插入字符串,并不会删除或者覆盖原来有的字符串,而是把原来有的挤到了后面
插入:调用 insert 方法,删除:调用 erase 方法
比如上面这个的插入结果就是 h111ello (在指定的位置插入字符串,并将原本占据这个位置的字符串往后推)
无论在那种情况下,字符串中字符的位置都是按照从左往右的顺序,从0开始排序的
1.调用的方法是substr
2.注意调用了substr方法后,并不会对原字符串造成影响,只是在原字符串中从给定的位置读取规定的字符个数,然后将读取到的字符组成一个新的字符串并以string类型的方式返回