1.串的基本概念
串是由 n ( n ≥0)个字符组成的有限序列。
2.C语言的串函数
( 1)串长度 int strlen(char * str)
( 2 )拷贝 char *strcpy(char * str1,char * str2)
( 3 )比较 int strcmp(char * str1,char *str2)
( 4 )字符定位 char * strchr(char str, char ch)
( 5 )子串查找 char * strstr(char * s1,char * s2)
( 6 )连结 char * strct(char * str1,charstr2)
3.串的顺序存储结构——顺序串
(1)静态数组结构定义
typedef struct
{
char str[MaxSize];
int lenth;
}string;
(2)动态数组结构定义
typedef struct
{
char * str;
int maxLength;
int length;
}DString;
(3)链串的定义
typedef struct Node
{
char str;
struct Node * next;
}SCharNode;
(4)块链的定义
typedef struct Node
{
char str[Number];
struct Node * Next;
}NCharNode;
4.串的模式匹配
(1)Brute-Force算法
int BFIndex( SqString S, SqString T)
{/*S为主串,T为模式串*/
int i=0,j=0,k=-1;
while(i<S.length &&j<T.length)
{
if(S.ch[i]==T.ch[j]) /*相等,就继续比较*/
{
i++;
j++;
}
else
{
i=i-j+1;
j=-;
}
}
if(j>=T.length)k=i-T.length;
return k;
}
时间复杂度为O(n*m)
(2)KMP算法
int KMPIndex(SqString S,int pos,int next[],SqString T)
{/*S为主串,pos为起始位置,next存放next函数值,T为模式字符串*/
int i=pos,j=0,r=-1;
while(i<S.length&&j<T.length)/*依次匹配每一个字符*/
{
if(S.ch[i]==T.ch[j])
{
++i;
++j;
}
else if(j==0)++i;
else j=next[j];
}
if(j>=T.length)r=i-T.length;
return r;
}
KMP算法从出现不同的字符开始匹配,减少了运算时间
时间复杂度为O(n+m)
看完点个赞!!!