第四章+字符串讲解.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章字符串讲解

字符串 (String) 字符串是 n ( ? 0 ) 个字符的有限序列, 记作 S : “c1c2c3…cn” 其中,S 是串名字 “c1c2c3…cn”是串值 ci 是串中字符 n 是串的长度。 例如, S = “Tsinghua University” 字符串抽象数据类型定义 ADT String { 数据对象:D={ai|ai CharacterSet, i=1,2…,n,n≥0} 数据关系:R1={ai-1,ai|ai-1,ai D,i=2,…,n} 基本操作: StrAssign(T,chars)生成字符串T StrCopy(T,S)复制字符串S StrEmpty(S)判断S是否为空串 StrCompare(S,T)比较字符串S和T StrLength(S)求字符串S长度 ClearString(S)清空字符串S Concat(T,S1,S2)连接字符串S1和S2 SubString(Sub,S,pos,len)求S长度为len位置为pos的子串 Index(S,T,pos)求子串在主串中的位置 Replace(S,T,V)在S中用子串V替换子串T StrInsert(S,pos,T)在S中插入子串T StrDelete(S,pos,len)在S中删除长度为len的子串 DestroyString(S)销毁串S } int Index ( String S, String T, int pos ) { if (pos 0) { n=StrLength(S); m=StrLength(T); i=pos; while (i=n-m+1) { SubString (sub, S, i, m); if (StrCompare(sub,T)!=0) ++i; else return i; }//while }//if return 0; }//Index 串的表示和实现 1.定长顺序存储表示 用一组地址连续的存储单元存储串值的字符序列。 #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1];//0号单元存串长 (1)串连接 Status Concat(SString T,SString S1,SString S2) { //如果连接后的串过长则截断 if (S1[0]+S2[0]=MAXSTRLEN) { T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..S1[0]+S2[0]]=S2[1..S2[0]]; T[0]=S1[0]+S2[0]; uncut=TRUE; } else if (S1[0]MAXSTRLEN) { T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN]=S2[1..MAXSTRLEN-S1[0]]; T[0]=MAXSTRLEN; uncut=FALSE; } else { T[0..MAXSTRLEN]=S1[0..MAXSTRLEN]; uncut=FALSE; } return uncut; }//Concat (2)求子串 Status SubString (SString Sub, SString S, int pos, int len){ if (pos1 || posS[0] || len0 || lenS[0]-pos+1) return ERROR; Sub[1..len]=S[pos.. pos+len-1]; Sub[0]=len; return OK; }//SubString 使用顺序存储结构过程中可能出现串长度超过数组上限,经过截断的串已经不完整,克服这个问题可使用动态分配串值的存储空间。 堆分配存储表示 堆是操作系统中为进程分配的自由存储空间,在C语言中用malloc()和free()来管理。 typedef struct { char *ch; int length; }HString; Status StrInsert(HString S, int pos, HString T){ //在串S的第pos个字符之前插入串T if (pos1||posS.length+1) return ERROR; if(T.length){ if(!(S.ch=(char *)realloc(S.ch,(S.length+T.length)*size

文档评论(0)

2299972 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档