一、串类型的定义
1.串的相等:两个串长度相等并且对应位置的字符都相等。
2.基本操作(注意初始条件 S存在 个别由长度限制)
StrAssign(&T,chars)
//生成一个其值等于chars的串T
StrCopy9&T, S)
//由串S复制得串T
StrEmpty(S)
//若S为空串返回TRUE,否则返回FALSE
StrCompare(S, T)
//若S>T返回值>0, S=T返回值=0, S<T 返回值<0
StrLength(S)
//返回S得元素个数
ClearString(&S)
//将S清为空串
Concat(&T, S1, S2)
//用T返回由串S1和S2连接而成得新串
SubString(&Sub, S, pos, len)
//Sub返回S得第pos个字符起长度为len得子串 从1开始
Index(S, T, pos)
//若S中存在和T值相同得子串则返回在S中第pos个字符之后第一次出现得位置;否则为0
Replace(&S, T, V)
//用V替换S中出现得所有与T相等得不重叠得子串
StrInsert(&S, pos, T)
//在串S第pos个字符之前插入T
StrDelete(&S, pos, len)
//从S中删除第pos个字符起长度为len得子串
DestroyString(&S)
//S被销毁
二、串的表示和实现
1.定长顺序存储:S[0]存放得是串得长度
2.堆分配存储表示
3.串得块链存储表示
三、串的模式匹配算法
1.简单匹配算法(Brute-Force):从前到后一次进行比较。算法复杂度最好情况O(n+m),最坏情况O(n*m)
int Index(SString S, SString T, int pos)
//返回子串T在主串S中第pos个字符之后的位置
{ int i = pos,j = 1;
while (i <= S[0] && j <= T[0])
{ if (S[i] == T[j]) // 继续比较后继字符
{ ++i; ++j; }
else // 指针后退重新开始匹配
{ i = i-j+2; j = 1; }
}
if (j > T[0]) return i-T[0];
else return 0;
} // Index
2.KMP算法:时间复杂度O(n+m)
int Index_KMP(SString S, SString T, int pos)
{
int i = pos ,j = 1;
while (i <= S[0] && j <= T[0])
{
if (j == 0 || S[i] == T[j]) // 继续比较后继字符
{ ++i; ++j; }
else j = next[j]; // 模式串向右移动
}
if (j > T[0]) return i-T[0]; // 匹配成功
else return 0;
} // Index_KMP