第四章(1)串

计算机上的非数值处理对象基本上是字符串数据:

串的定义:

      是由零个或者多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。

      一般定义为:  s=‘a1 a2 a3 a4 .... an’ (n>=0)




空串和空白串的区别:

            空串是指长度为零的串,空白串是指包含一个多个空白字符的字符串。


----------------------------------------------------------------------------------------------------------------


串的抽象数据类型定义:

    ADT String{

         数据对象:D={ ai | ai 属于 Character , i=1,2,3.... n , n>=0 }  

         数据关系:R1={ <ai-1,ai> | ai-1,ai 属于 D, i=2,...,n }

         基本操作:

               StrAssign( &T , chars )

          初始条件:chars是字符串变量。

          操作结果:生成一个其值等于chars的串T。

               StrCopy( &T , S  )

          初始条件:串 S 存在。

          操作结果:由串S复制得串T。


               StrEmpty( S )

          初始条件:串S已经存在。

          操作结果:若 S 为空串,则返回TRUE,否则返回 FALSE。


               StrCompare( S , T )

          初始条件:串 S 和 T存在 。

          操作结果:若 S>T ,则返回值 >0,   若 S=T ,则返回值 =0,    若 S<T ,则返回值 <0, 


               StrLength( S  )

          初始条件:串 S 存在。 

          操作结果:返回 S 的元素个数,成为串的长度。


               Concat( &T ,S1 ,S2 )

          初始条件:串 S1 和串 S2 存在。

          操作结果:用 T 返回由 S1 和 S2联接而成的新串。


               SubString( &Sub ,  S , pos , len )

          初始条件:串S存在, 1<=pos<=StrLength( S )且  0<=len<=StrLength(S)-pos+1。

          操作结果:用 Sub 返回串 S 的第 pos 个字符起长度为 len 的子串。


               Index( S ,T ,pos )

          初始条件:串 S 和 T 存在,T是非空串, 1<=pos<=StrLength( S )

          操作结果:若主串 S 中存在和串 T 值相同的子串,则返回它在主串 S 中第 pos 个字符之后第一次出现的位置;否则函数返回值为 0 。


               Replace( &S , T , V )

          初始条件:串 S , T  和  V  存在, T  是 非空串 。

          操作结果:用 V 替换 主串 S 中出现的所有与   T  相等的不重叠的子串。


               StrInsert( &S , pos ,T  )

          初始条件:串 S 和 T 存在, 1 <= pos <= StrLength(S)+1。

          操作结果:在串 S 的第 pos 和字符之前插入 串 T。


               StrDelete( &S , pos , len )

          初始条件:串 S 存在 , 1 <= pos <=StrLength( S ) - len +1。

          操作结果:从串S中删除 第 pos 个字符起长度为  len  的子串。


               DestroyString( &S  )

          初始条件:串 S 存在 。

          操作结果:串 S 被销毁 。

    }


----------------------------------------------------------------------------------------------------------------

对串长有两种表示方法:

            #define MAXSTRLEN 255          //用户可在255内定义最大串长

            typedef  unsigned char  SString[MAXSTRLEN+1];    //0号单元存放串的长度


      1、以下标为 0 的数组分量存放串的实际长度,如PASCAL语言中的串类型采用这种表示方法。

      2、在串值后面加一个不计入串长的结束标志字符,如在C语言中以 ‘\0’表示串值得终结。



堆分配的特点:

       仍用一组地址连续的存储单元存放串值存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配而得的。

           C语言的动态分配函数 malloc()来为每一个新产生的串分配一块实际串长所需的存储空间,若分配成功,则返回一个指向起始地址的指针,作为串的基址,和free()。

//------------------------堆分配的存储结构-------------------

typedef struct {

        char  *ch;              //若是非空串,则按串长分配存储区,否则 ch 为NULL

        int length;            //串长度

}HString; 












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值