- 4
- 0
- 约3.39千字
- 约 19页
- 2016-06-07 发布于湖北
- 举报
第四章 串(string) * 4.1 定义和运算 一、定义 串(或字符串),是由零个或多个字符组成的有限序列。 一般记为:s= a1a2...an (n=0) 其中s是串的名,用单引号括起来的字符序列是串的值;串中字符的数目n称为串的长度。零个字符的串称为空串,通常以两个相邻的双引号来表示空串(Null string),如:s= ,它的长度为零;仅由空格组成的的串称为空格串,如:s= └┘ ;若串中含有空格,在计算串长时,空格应计入串的长度中,如:s= I’m a student 的长度为13。 * 串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常称字符在序列中的称为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。 当一个字符在串中多次出现时,以该字符第一次在主串中出现的位置为该字符在串中的位置。 例:a= BEI , b= JING , c= BEIJING , d= BEI JING 串长分别为3, 4, 7, 8,且a, b都是c, d的子串。 若称两个串是相等的,当且仅当这两个串的值相等。 * 注意:在C语言中,用单引号引起来的单个字符与单个字符的串是不同的, 如s1=‘a’与s2=〃a〃两者是不同的, s1表示字符,而s2表示字符串。 * 二、运算 1、基本运算 赋值(=) 连接(+) 求长度 length(S) 求子串 substr(S,i,j) 比较 strcmp(S1,S2) * 2、常用运算 插入 insert(S,i,S1) 删除 delete(S,i,j) 替换 replace(S,i,j,S1)——把S中不满意的变量换为需要的变量。 检索 index(S,S1)——若找到,即S1是S的子串,则返回S中S1第一次出现的位置; 否则,为0(或-1)。 * 插入: 在S中插入S1 S= a1a2a3…ai-1 ai …an S1 S= substr(S,1,i-1)+S1+substr(S,i,length(S)-i-1) * 删除: S= a1a2a3…ai-1ai … ai+j-1ai+j …an S=substr(S,1,i-1)+substr(S,i+j,length(S)-(i+j-1)) * 索引:从S中取长度相等的元素与S1比较,否则后移。 index( substring , str)=4 index( substring , sr)=0 替换:先删除后插入 Replace(A,B,C) 若B是A的子串,用C取代A中所有B。 例:A= monday B= mon C= thur Repl(A,B,C)= thurday Repl (A, mon ,C )= monday * 4.2 串的存储 对串的存储方式取决于我们对串所进行的运算,如果在程序设计语言中,串的运算只是作为输入或输出的常量出现,则此时只需存储该串的字符序列,这就是串值的存储。此外,一个字符序列还可赋给一个串变量,操作运算时通过串变量名访问串值。实现串名到串值的访问,在C语言中可以有两种方式:一是可以将串定义为字符型数组,数组名就是串名,串的存储空间分配在编译时完成,程序运行时不能更改。这种方式为串的静态存储结构。另一种是定义字符指针变量,存储串值的首地址,通过字符指针变量名访问串值,串的存储空间分配是在程序运行时动态分配的,这种方式称为串的动态存储结构。 * 串是一种特殊的线性表,因此串的存储结构表示也有两种方法: 静态存储采用顺序存储结构, 动态存储采用的是链式存储和堆存储结构。 * 一、串的静态存储结构 类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。由于一个字符只占1个字节,而现在大多数计算机的存储器地址是采用的字编址,一个字(即一个存储单元)占多个字节,因此顺序存储结构方式有两种: (1)紧缩格式:即一个字节存储一个字符。这种存储方式可以在一个存储单元中存放多个字符,充分地利用了存储空间。但在串的操作运算时,若要分离某一部分字符时,则变得非常麻烦。 d a t a └┘ s t r u c t u r e \0 ?
原创力文档

文档评论(0)