字符串

字符串实际上就是字符型数组,书上构造了一个HString类来表示数组,该类有两个数据成员以及一些操作函数,数据成员有两个,一个是char型指针,另一个是存储当前串长度的int型length成员,我们用char型指针来指向我们动态分配的char型数组,这样又加上了长度,我们就可以知道数组的前几个字符就构成了我们的字符串了。

构造函数:构造函数有三种方式,

首先当我们构造的时候不传进来参数,我们就会有一个默认的构造函数,这个函数会将char型指针赋值为NULL,把长度初始化为0,这样就完成了空串的构建工作。

另一种是传进来一个字符串字面值(关于这个字符串字面值有值得说的地方,他其实是一个const的char型数组,我们通过构造函数操作把这个传进来的const数组复制进我们新开辟的动态数组里面去),我们先用strlen(str)来得到传进来的字符串字面值的长度,其实字符串字面值的末尾都有空字符 ‘\0’,而这个strlen()函数会返回空字符前面的字符的数目,我们依据这个数目来创建我们的动态数组并决定赋值多少个元素进去。

最后一种方式似乎应该叫拷贝构造函数,我们传递进去一个HString类型的对象,然后我们用这个对象来初始化我们的对象,这时和上面的请鲁昂没有什么不同,都是开辟内存,然后就开始复制,所以不再多讲。

析构函数:析构函数的工作就是释放所有的内存空间,彻彻底底的destrory我们的对象,我们在构造函数里面调用了另一个函数clearstring()这个函数就是先判断字符串是不是空的,如果不是空的,我们就让它变成空的,我们就delete[]char,然后再让char等于NULL,length=0,这样就完成了析构工作,因为HString的数据成员只有char型指针ch,和int型变量length,这些都是基本的变量类型,我们没有办法去自己消除一个int或者char*对象,所以我们能做的也就是让他们恢复到空串的状态了。

再就是用一个字符串字面值来改变我们已经创建的HString对象,这就是一个函数,我们这个函数要做的就是要首先清空我们的HString对象,开辟内存,然后我们再将字符串字面值的内容复制进来,然后就是动态数组的交接了,把动态数组的管理权交给我们的对象,改变他的length成员,这样就完成了操作。

我们也可以用一个HString对象来改变我们现有对象,目的是使我们的现有对象和所传进来的参数的内容完全一样,具体的操作就是上面操作的翻版,没有什么新的地方,似乎这种操作可以通过重载赋值运算符来完成,看起来也会更好一些。这种复制是类值的复制,即我们的对象想一个普通的值,而不是指针之间的那种复制。

判断空不空,直接返回 return length==0;就可以了。

两个字符串的比较操作,也就是在两者都没有比较完的情况下进行比较,返回0表示两者相等,返回>0的数表示前者大于后者,这种大于是字符ASCII码的比较得来的,也就是直接的两个字符相减,如果一个字符串短一个字符串长,短的完全匹配长的前段,这时就会出现一个已经比较完了一个还没有完的情况,我们这个时候就返回他们的长度之差作为返回值。

 

两个串拼接成一个串,这个操作就是开辟一个动态数组长度是传进来的两个字符串的长度之和,我们先把一个字符串复制进来,再把另一个字符串复制进来,然后我们再把这个动态数组的所有权交给函数的调用对象,当然在这之前,我们要先释放我们的调用对象。类似于 a=b+c这样的形式。

再就是在一个字符串的第几个字符之前插进去另一个字符,其实还是借助一个我们动态分配的数组来完成这个操作,我们先复制待插数组的前半部分,再复制要插进去的目标数组,再复制待插数组的后半部分,我们再把原来的对象释放掉,把这个动态分配且已经复制好的数组交接给原来的那个字符串,这样我们就完成了插入操作。

再就是删除操作,我么还是借助一个动态数组,把一个字符串里面我们不删除的那部分复制进动态数组,释放原来的对象,交接动态数组控制权,这样就完成了删除操作。

再就是判断字符串A的第几个元素之后,存不存在与我们的字符串B完全匹配的片段,我们的做法就是调用另一个函数,每次都从第i个元素之后取出长度为B的长度的一个字串,然后我们拿着这个字串和B来进行比较,然后不断的i++,直到再也取不出长度和B相等的字串为止,如果找到了,我们就返回i,找不到就返回0

再就是上面操作的进一步集成,就是在一个字符串里面,我们判断有没有字符串A,如果有的话我们就用字符串B来替代字符串A,这个函数的操作顺序如下,首先呢我们要找一下在第1个字符之后是不是存在A,找到了我们返回的是它的起始字符的次序,我们就调用delete操作删掉这个片段,然后再调用insert操作插入B,然后我们再更新i在后面的未处理的字符里面继续寻找,直到再也无法在后续片段里面找到A字符位置。

posted @ 2015-05-08 11:17  韩冰云  阅读(133)  评论(0编辑  收藏  举报