0.结构体
#define MALEN 255
typedef struct{
char ch[MAXLEN];
int length;
}SString;//顺序存储静态分配,第一个存储位置不用
1.求子串
算法思想:
定义串Sub暂存子串,先判断所求范围是否越界。接着对应位置赋值即可。
代码如下:
bool SubString(SString &Sub, SString S, int pos, int len){
//求串S中,从位置pos起,长度为len的子串,暂存在Sub中。
//判断范围越界
if(pos+len-1>S.length)
return false;
for(int i=pos; i<pos+len; i++)
Sub.ch[i-pos+1] = S.ch[i];
Sub.length=len;
return true;
}
2.比较
算法思想:
串元素不同返回ASCII码差值,相同返回长度差。
代码如下:
int StrCompare(SString S, SString T){
for(int i=1; i<=S.length && i<=T.length; i++){
if(S.ch[i]!=T.ch[i])
return S.ch[i]-T.ch[i];
}
return S.length-T.length;
}
3.定位
算法思想:
定位操作,依次遍历,每次取定长子串比较,直至剩余元素不足以比较为止。
代码如下:
int index(SString S, SString T){
int i=1, n=S.length, m=T.length;
while(i<=n-m+1){//从后往前,预留空间
SString Sub;
SubString(Sub, S, i, m);
if(StrCompare(Sub, T)!=0) i++;
else return i;
}
return 0;
}