串的定长顺序存储结构:从串s中删除所有和串t相同的子串

来源:互联网 发布:矩阵的数学期望定义 编辑:程序博客网 时间:2024/06/05 19:59
编写算法,从串s中删除所有和串t相同的子串。要求采用以下所定义的定长顺序存储表示,但不允许调用串的基本操作。
定长顺序串SString的类型定义:
typedef unsigned char SString[MAXSTRLEN+1];  /* s[0] is the string's length */

实现函数如下:

Status DelSub(SString &s, SString t)/* 从串s中删除所有和串t匹配的子串。     *//* 若有与t匹配的子串被删除,则返回TRUE;*//* 否则返回FALSE                        */{    int i,j,pos,flag;     i = 1;    flag = 0;                              while(i <= s[0]-t[0]+1){        j = 1;        pos = i;         //记录当前模式串的位置        while(j <= t[0]){            if(s[pos] == t[j]){//模式串匹配                ++j;                ++pos;            }            else                break;        }        if(j > t[0]){    //模式串匹配成功,进行删除操作                        while(pos <= s[0]){                s[pos -t[0]] =s[pos];//被删除子串后的元素往前移                ++pos;            }            s[0] = s[0] - t[0];//当前主串长度减少            flag = 1;      //匹配成功,标记为1                       }        else             ++i;          //模式串匹配不成功,模式串向后移    }    if(flag)        return TRUE;    else        return FALSE;}


0 0
原创粉丝点击