ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:165.28KB ,
资源ID:17378599      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17378599.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第4章 串Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第4章 串Word文档格式.docx

1、s1s2,s3s45. 空格串与空串 空格串:由一个或多个空格符组成的串串中包含空格符,串长不为0。 空串:串长为0,即串中不包含任何字符。6. 串与线性表 串是一种数据元素固定为字符的线性表。因此,仅就数据结构而言,串归属于线性表这种数据结构。但是,串的基本操作和线性表上的基本操作相比却有很大的不同。线性表上的操作主要是针对线性表中的某个数据元素进行的,而串上的操作则主要是针对串的整体或串的某一部分子串进行的 。4.1.2 串的抽象数据类型 ADT String Data: 串中的数据元素仅由一个字符组成,相邻元素具有前驱和后继的关系。 Operation: StrAssign(&S,cha

2、rs) 初始条件:chars是字符串常量。 操作结果:把chars赋为串S的值。 StrCopy(&S,T)串T存在。由串T复制得串S。 StrEmpty(S)串S存在。若S为空串,则返回true;否则返回false。 StrLength(S)返回S的元素个数,即串的长度。 StrCompare(S,T)串S和T存在。若ST,则返回值T,则返回值0。 StrConcat(&S,T)用S返回由S和T联接而成的新串。 SubString(S,&Sub,pos,len)串S存在,1posStrLength(S)且0lenStrLength(S)-pos+1。用Sub返回串S的第pos个字符起长度le

3、n的字串。 Index(S,T,&pos)串S和T存在,且T是非空串,1posStrLength(S)。若主串S中存在和串T值相同的子串,则由pos返回它在主串S中第一次出现的位置,函数值为true;否则函数值为false。 StrInsert(&S,pos,T)串S和T存在,1posStrLength(S)+1。在串S的第pos个字符之前插入串T。 StrDelete(&S,pos,len)串S存在,1posStrLength(S)-len+1。从串S中删除第pos个字符起长度为len的子串。 Replace(&S,T,V)串S,T和V存在,T是非空串。用V替换主串S中出现的所有与T相等的不

4、重叠的子串。 StrTraveres_Sq(S)串S已存在。依次输出串S中的每个字符。 DestroyString(&S)串S被撤销。ADT String。4.1.3 最小操作子集 对于串的基本操作集,可以有不同的定义方法,各种程序设计语言都有自己的串操作函数,如在表4.1中列出了C/C+部分串操作函数。一般来说,串赋值StrAssign、串挎贝StrCopy、串比较StrCompare、求串长StrLength、串联接StrConcat以及求子串SubString等操作可以构成串结构的最小操作子集,即这些操作不能用其他串操作来实现,反之,其他串操作(除串撤销DestroyString外)均可

5、在这个最小操作子集上实现。如串置换操作就可通过调用串的定位操作、串插入操作和串删除操作来实现。表4.1 C/C+中对应的串操作函数4.2 顺序串及其操作1. 顺序串的定义 2. 顺序串的结构描述 3. 顺序串的基本操作4. C+中的串操作1. 顺序串的定义 串的顺序存储结构简称顺序串。与顺序表类似,顺序串是用一组地址连续的存储单元来存储串中的字符序列。因此可用高级语言的字符数组来实现,按其存储分配的不同可分为:静态存储分配的顺序串和动态存储分配的顺序串。2. 顺序串的结构描述静态存储分配的顺序串动态存储分配的顺序串静态存储分配的顺序串直接使用定长的字符数组来定义: # define MaxSt

6、rSize 256 typedef char SqStringMaxStrSize+1;类似静态顺序表的定义:typedef struct char strMaxStrSize; int length; SSqString;说明:静态存储分配的顺序串,都是用定长字符数组存储串值,串的操作比较简单,但由于串值空间的大小已经确定,所以对串的某些操作,如插入、连接、置换等带来不便。动态存储分配的顺序串在应用程序中,参与运算的串变量之间的长度相差较大,并且在操作中串值长度的变化也比较大,因此,可利用C/C+的函数malloc() 为每个新产生的串分配一块实际串长所需的存储空间,并将其起始地址作为串的基

7、址。这样,当进行串的插入、连接等操作时,再根据实际需要增补空间,以满足插入和连接等操作的需要。所以在描述动态顺序串时,当前数组的容量和增补空间量不再作为结构的一部分,其结构的描述如下:typedef struct char *str; / 存放非空串的首地址 / 存放串的当前长度DSqString;动态存储分配的顺序串,串值空间的大小是在程序执行时动态分配而得,这对串的插入、连接、置换等操作非常有利 ,因此在串处理的应用程序中也常被选用。3. 顺序串的基本操作1. 串赋值2. 串复制3. 求串长4. 串比较5. 串连接6. 取子串7. 子串的定位8. 插入子串、9. 删除子串10. 置换子串

8、11. 串的遍历12. 撤销顺序串1. 串赋值串赋值操作就是把一个字符串常量赋值给顺序串S。其主要操作是:判断顺序串S是否非空,若是,则释放其空间;求串常量的长度,若长度等于0,就将顺序串S置空,否则,以此长度为标准为顺序串S申请空间;把串常量chars的值复制到顺序串S中去,同时顺序串S的长度被赋值为串常量的长度。其算法描述见算法4.1 。可以利用这个操作进行顺序串的初始化。算法4.1bool StrAssign_Sq(DSqString &S,char *chars) int i,j; char *c; if(!S.str) free(S.str); for(i=0,c=chars;*c;

9、i+,c+);i) S.str=NULL; S.length=0; else if(!(S.str=(char *)malloc(i*sizeof(char) return false; for(j=0;ji;j+) S.strj=charsj; S.length=i; return true;/ StrAssign_Sq2. 串复制 串复制操作就是把一个顺序串T复制到另一个顺序串S中,使S和T具有一样的串值。判断顺序串S是否非空,若是,则要释放顺序串S原有空间;判断顺序串T的长度T.length是否等于0,若是,就将顺序串S置空,否则,为顺序串S申请T.length个数据元素的空间把顺序串T

10、的值复制到顺序串S中去,同时顺序串S的长度被赋值为T.length。其算法描述见算法4.2。算法4.2bool StrCopy_Sq(DSqString &S,DSqString T) int i;T.length) S.str=NULL;(S.str=(char *)malloc(T.length*sizeof(char) return false; for(i=0;iT.length;i+) S.stri=T.stri; S.length=T.length;/ StrCopy_Sq3. 求串长 int StrLength_Sq(DSqString S) return(S.length);/

11、 StrLength_Sq4. 串比较比较顺序串S和顺序串T,若ST,则返回值小于0;若S=T,则返回值等于0;T,则返回值大于0。从顺序串S的第一个字符和顺序串T的第一个字符开始比较,若顺序串S的对应字符大于顺序串T的对应字符,则返回1;若顺序串S的对应字符小于顺序串T的对应字符,则返回-1;若顺序串S的对应字符等于顺序串T的对应字符,则循环继续比较下一对字符,直至对应字符不相等或顺序串S或顺序串T结束时循环终止。若循环终止后:顺序串S没有结束,则返回1;顺序串T没有结束,则返回-1;顺序串S和顺序串T同时结束则返回0。其算法描述见算法4.4。算法4.4int StrCompare_Sq(D

12、SqString S,DSqString T) int i=0; while(iT.stri) return 1; else if(S.striT.stri) return -1; i+; if(iS.length) return 1; else if(iT.length) return -1; return 0;/ StrCompare_Sq5. 串连接 将顺序串T连接在顺序串S之后,并返回连接后的顺序串S。判断顺序串T的长度是否为非0,若是,则为顺序串S增补T.length个数据元素的空间;把顺序串T中的所有字符复制到顺序串S中去,同时将顺序串S的长度增加T.length。其算法描述见算法

13、4.5。算法4.5bool StrConcat_Sq(DSqString & if(T.length) (S.str=(char *)realloc(S.str,(S.length+T.length)*sizeof(char) S.strS.length+i=T.stri; S.length+=T.length;/ StrConcat_Sq 6. 取子串在顺序串S中从第pos个位置开始,取长度为len的子串Sub。判断取子串的位置pos和长度len是否合理,若不合理 ,则返回false,否则执行;判断子串Sub是否非空,若是,则释放其空间,否则为子串Sub申请len个数据元素的空间;从主串第p

14、os个位置开始复制len个字符到子串Sub中去,同时串Sub的长度被赋值为len。其算法描述见算法4.6。算法4.6bool SubString_Sq(DSqString S,DSqString &Sub,int pos,int len) if(posS.length-1|lenS.length-pos) if(Sub.str) free(Sub.str);len) Sub.str=NULL; Sub.length=0;(Sub.str=(char *)malloc(len*sizeof(char) for(i=0;len; Sub.stri=S.strpos+i; Sub.length=le

15、n;/ SubString_Sq 取子串操作过程演示7. 子串的定位 子串的定位操作也叫串查找操作、串的模式匹配操作。它是在主串S中查找是否存在和串T值相同的子串,若存在,则匹配成功,并由pos返回它的第一个字符在主串S中第一次出现的位置,否则匹配失败。将串S的第一个字符和串T的第一个字符进行比较,若相等,则继续比较两者的后续字符;否则,将串S的第二个字符和串T的第一个字符进行比较,重复上述过程,若串T中的字符全部比较完毕,则本趟匹配成功,函数返回true;其算法描述见算法4.7。算法4.7bool Index_Sq(DSqString S,DSqString T,int & int i=0,

16、j=0; if(S.stri=T.strj) i+; j+; else i=i-j+1; j=0; if(j=T.length) pos=i-T.length; else return false;/ Index_Sq8. 插入子串在顺序串S的第pos个字符之前插入子串T。判断插入的位置pos是否合理,若不合理 ,则返回false,否则执行;判断子串T是否非空,若是,则为串S增补T.length个数据元素的空间;将串S中从pos位置开始到串结束之间的所有字符向后移动T.length个元素位置;把串T中的所有字符复制到顺序串S第pos至pos+T.length-1中去,同时顺序串S的长度增加T.

17、length。其算法描述见算法4.8。算法4.8bool StrInsert_Sq(DSqString &S,int pos,DSqString T)S.length) return false; if(T.str) for(i=S.length-1;i=pos;i-) S.stri+T.length=S.stri; S.strpos+i=T.stri; S.length=S.length+T.length;/ StrInsert_Sq 插入子串操作过程演示9. 删除子串从顺序串S的第pos个字符开始删除长度为len的子串。判断删除的位置pos和长度len是否合理,若不合理 ,则返回false

18、,否则执行;将串S中从pos+len位置开始到串结束之间所有字符向前移动len个元素的位置,同时串S的长度减少len;将串S的存储空间减少len。其算法描述见算法4.9。算法4.9bool StrDelete_Sq(DSqString &S,int pos,int len)0|len for(i=pos+len;=S.length-1; S.stri-len=S.stri; S.str=(char *)realloc(S.str,(S.length-len)*sizeof(char); S.length=S.length-len;/ StrDelete_Sq 删除子串操作演示10. 置换子串

19、用串V置换主串S中出现的所有与T相等的不重叠子串。调用子串的定位函数Index_Sq( ),若函数值为true,则得到串T在串S中的位置pos;调用删除子串函数StrDelete_Sq( )从串S中pos开始删除串T;调用插入子串函数StrInsert_Sq( )将串V插入到串S的第pos个字符之前。重复上述过程,直至函数Index_Sq( )的返回值为false终止。其算法描述见算法4.10。算法4.10void StrReplace_Sq(DSqString &S, DSqString T,DSqString V) int pos; while(Index_Sq(S,T,pos) StrD

20、elete_Sq(S,pos,T.length); StrInsert_Sq(S,pos,V);/ StrReplace_Sq11. 串的遍历 void StrTraveres_Sq(DSqString S)StrLength_Sq(S);i+) coutS.stri;endl;/ StrTraveres_Sq12. 撤销顺序串 void DestroyString_Sq(DSqString & free(S.str); S.str=NULL;/ DestroyString_Sq4. C+中的串操作# include stringiostreamusing namespace std;void main( ) string s1=abcd,s2=123,s3;串s1的值为:s1s2) couts2 else if(s1=s2) couts1=s2 else cout s1.insert(2,s2);插入后的串s1为: s3=s1.substr(4,5);子串s3为:s3next=NULL; else p=S; while(*chars) q=(SLinkString)malloc(sizeof(LN

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1