串的操作
串的定义
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; //匹配失败
}