文档介绍
往往在字符串的插入操作中,仅已知子串T插入在字符‘x’之后,因此我们可以通过求子串在串中的序号INDEX(x)函数,得‘x’在串S中的位置i,再完成子串的插入。 若在串S中删除一个子串T,其操作类似于串的插入。完成删除子串操作的程序段为 L1=LEN(S) L2=LEN(T) IND=INDEX(S,T) if(IND=0)write('子串T不在串S中,无需删除') else S=SUB(S,1,IND-1)+SUB(S,IND+L2,L1) 例6.4 设有串S、子串A,求子串序号可用算法INDEX(S,A)完成。从串的第一个字符开始,每次截取长度与A相同的子串,依次从左至右进行扫描,判断是否与子串A相同,若相同,则该子串的第一个字符在串S中的位置就是所求的序号,否则从下一个字符开始重新截取,直至结束;若不存在,则序号为零。其算法如下: INDEX(s,a) /* 求子串a在串s中的序号ind */ { n=len(s);m=len(a);ind=0; if (n<m) return; /* 子串a的长度大于串s的长度,则不存在a是s的子串 */ else { i=1; while (i<=n-m) { x=SUB(s,i,i+m-1); if(x==a) { ind=i; return; } else i++; } } /* 从串s的第一个字符开始截取长度为m(子串a的长度),依次扫描 */ } 要实现用子串B置换串S中子串A的算法。同样地,在串S中从第一个字符开始扫描是否存在串A,若存在,则用B串代替;然后再次从头依次搜索,若仍存在子串A,再用串B取代,直到串S中找不到和串A相同的子串为止。由于算法中需要动态地求子串A在串S中的序号,即当前以串B代替在串S中的子串A后,再继续求串A在串S的序号,我们将调用求子串序号IND的算法INDEX