串的定义及其基本运.pptVIP

  • 60
  • 0
  • 约6.09千字
  • 约 27页
  • 2017-02-01 发布于北京
  • 举报
第四章 串 几个术语 空串:长度为0的字符串; 空格串:由空格字符组成的字符串,长度1. 子串:字符串中任意个连续的字符构成的序列; 母串:包含该子串的字符串; 两串相等:两个字符串的长度相等且各对应位置上的字符都相同. 字符的位置:从1开始 子串的位置:该子串第一个字符的位置 4.1.2 串的基本运算 1. 求串的长度StrLength(s); 2.串赋值StrAssign(s1,s2); 3. 两个串的连接StrConcat(s1,s2,s)或StrConcat(s1,s2) 4. 求某串的子串SubStr(s,i,len); 5.串比较StrCmp(s1,s2); 6.子串定位StrIndex(s,t); 7.插入子串StrInsert(s,i,t); 8. 删除子串StrDelete(s,i,len); 9. 置换StrRep(s,t,r)。 4.2串的定长顺序存储及基本运算 4.2.3模式匹配 设s和t是给定的两个串,在主串s中查找子串t的过程称为~。其中t也称为模式。 1.简单的模式匹配算法(BF算法) (1)算法思想: 2.改进后的模式匹配算法(KMP算法) 4.3 串的堆存储结构 4.3.1 串名的存储映像 1.带串长度的索引表 * 4.1 串的定义及其基本运算 4.2 串的定长顺序存储及基本运算 4.3 串的堆存储结构 作业6:P235(1,2) 4.1.1串的定义 定义:串(string)是由零个或多个任意字符组成的字符序列,又称为字符串(character string),一般记为: 4.1 串的定义及其基本运算 s=〝a1 a2 a3…an〞 说明: 1)其中s是串名,用双引号括起来的字符序列是串的值。 2)ai(1=i=n)可以是字母、数字或其他字符;n为串中字符的个数,称为串的长度,i是序号。 3)一个长度为零的串称为空串,表示为s =“”或?。 4)空格也是合法字符,空格串是字符,为空格的串。 4.2.1存储结构的实现 #define MAXSIZE 256 typedef struct {char data[MAXSIZE]; int curlen; }SeqString; 第一种: 第二种: #define MAXSIZE 256 char s[MAXSIZE]; a b e f i 0 2 5 6 s.curlen c d g h 1 3 4 7 8 s.data MAXSIZE-1 a b e f i 0 2 5 6 c d g h 1 3 4 7 8 \0 9 MAXSIZE-1 第三种: #define MAXSIZE 256 char s[MAXSIZE+1]; a b e f i 0 2 5 6 c d g h 1 3 4 7 8 9 9 MAXSIZE 4.2.2运算实现(采用第二种表示串长的方式) 1. 求串的长度StrLength(s); int StrLength(char s[]) {int len=0; while(s[len]!=‘\0’)len++; return len; } 2.串赋值 StrAssign(s1,s2); void StrAssign(s1,s2) char s1[ ], s2[ ] ; {int j=0; while(s2[j]!=‘\0’) {s1[j]=s2[j]; j++;} s1[j]=‘\0’; } 3. 两个串的连接StrConcat1(s1,s2,s) 4. 求某串的子串SubStr(s,i,len); 5.串比较StrCmp(s1,s2); 为运算方便,字符串采用定长存储,且用第三种方式表示串长: #define MAXSIZE 256 char s[MAXSIZE+1]; a b e f i 0 2 5 6 c d g h 1 3 4 7 8 9 9 MAXSIZE 例: 主串S: “acabaabaabcacaabc” 模式串t:“abaabcac” s: a c a b a a b a a b c a c a a b c t: a b a a b c a c i=1 j=1 s: a c a b a a b a a b c a c a a b c t: a b a a b c a c i=2 j=2 if(s[i]==t[j]){i++;j++;} if(s[i]!=t[j]) {i回溯到本趟开始的下一个;

文档评论(0)

1亿VIP精品文档

相关文档