数据结构——串

串的操作

串的定义

typedef struct {
    char data[MAXSIZE];
    int curlen;
}SeqString;

串的连接

存放元素从第0位开始

void StrConcat (char * S1, char * S2, char * S) {
    int i = 0,j = 0;
    while (S1[j] != '\0') {
        S[i++] = S1[j++];
    }
    j = 0;
    while (S2[j] != '\0') {
        S[i++] = S2[j++];
    }
    S[i] = '\0';
    
}

求子串

将串S中从第pos(1<=pos<=Slen)个字符开始,将len个字符复制到子串Sub中,求子串成功返回1

int SubString (char * Sub, char * S, int len, int pos) {
    int j;
    int Slen = strLength(S);        //求串的长度
    if (pos<1 || pos > slen || len < 0 || len > Slen - pos + 1) {
        return 0;           //求子串失败
    }
    for (j = 0; j < len; j++) {
        Sub[j] = S[pos - 1 + j];
    }
    Sub[len] = '\0';
    return 1;               //求子串
}

模式匹配

在主串S中找到等于子串T的过程称为模式匹配,函数返回T在S中首次出现的存储位置(序号---从1开始),否则匹配失败,返回-1。模式匹配比较特殊,为了计算方便,第0个元素存放的是元素个数,元素从第1个开始存放。

int Index_BF (char * S, char * T, int pos) {
    int i = pos;
    int j = 1;
    while ( i <= S[0] && j <= T[0]) {
        if (S[i+j-1] == T[j]) {
            j++;
        } else {
            i++;
            j = 1;
        }
    }
    if (j > T[0]) {
        return i;   //匹配成功  返回位置
    }
    return -1;      //匹配失败
}

你可能感兴趣的:(数据结构——串)