|
对于串的基本操作集可以有不同的定义方法,读者在使用高级程序设计语言中的串类型时,应以该语言的参考手册为准。但在上述抽象数据类型定义的13种操作中,串赋值StrAssign、串复制StrCopy、串比较StrCompare、求串长StrLength、串联接Concat以及求子串SubString等6种操作构成串类型的最小操作子集。
例如,可利用判等、求串长和求子串等操作实现串的定位函数 Index(S,T,pos) 和串的置换操作 Replace(S,T,V)。
|
|
换句话说,如果在高级程序设计语言中设有"串类型"的话,提供的基本操作不能没有这6种操作,因为它们不能通过其它串操作实现。 |
|
|
算法4.1
int Index (String S, String T, int pos)
{
//
T为非空串。若主串S中第 pos 个字符之后存在与T相等的子串,
// 则返回第一个这样的子串在S中的位置,否则返回0。
if (pos > 0) {
n = StrLength(S); m = StrLength(T); //
求得串长
i = pos;
while ( i <= n-m+1) {
SubString (sub, S, i, m); //
取得从第 i 个字符起长度为 m 的子串
if (StrCompare(sub,T) != 0) ++i ;
else return i ; //
找到和 T 相等的子串
} // while
} // if
return 0; //
S 中不存在满足条件的子串
} // Index |
|
实现Index(S,T,pos)算法的基本思想为:从主串S中取"第
i 个字符起、长度和串T相等的子串"和串T比较,若相等,则求得函数值为 i,否则 i 值增1直至找到和串T相等的子串或者串S中不存在和T相等的子串为止。即求使下列等式
StrCompare(SubString(S,i,StrLength(T)),T)==0
成立的 i 值。i 的初值应为 pos,在找不到的情况下,i 的终值应该是 n-m+1,其中,n 为S串的长度,m
为T串的长度。
|
|