目录
知识总览
一、串的定义
1、串:即字符串(String)是由零个或多个字符组成的有限序列
2、串和线性表的比较
二、串的基本操作
1、基本操作
2、串的比较操作
3、编码
4、小结
三、串的存储结构
知识总览
1、顺序存储-静态
#define MAXLEN 255 //预定义最大串长为255
typedef struct{
char ch[MAXLEN]; //每个分量存储一个字符
int length; //串的实际长度
}SString;
2、顺序存储-动态
typedef struct{
char *ch; //按串长分配存储区,ch指向串的基地址
int length; //串的长度
}HString; //动态数组实现
HString s;
S.ch = (char*)malloc(MAXLEN * sizeod(char));
S.length;
3、串的链式存储
typedef struct StringNode{
char ch; //每个结点存一个字符
struct StringNode * next;
}StringNode,*String;
4、基本操作的实现
#define MAXLEN 255 //预定义最大串长为255
typedef struct{
char ch[MAXLEN]; //每个分量存储一个字符
int length; //串的实际长度
}SString;
1、求子串
2、比较字符串![](https://img-blog.csdnimg.cn/a21821efec0b4808a2507804009405d9.png)
3、定位子串位置
5、小结
四、字符串--模式匹配算法
两种模式匹配算法
1、朴素模式匹配算法
int Index(SString S,SString T){
int i=1,j=1;
while(i<=S.length && j<T.length){
if(S.ch[i] == T.ch[i]){
++i;
++j; //继续比较后续字符
}
else{
i = i+j-2;
j = 1; //指针后退重新开始匹配
}
}
if(j>T.length)
return i-T.length;
else
return 0;
}
小结
2、KMP算法(难度很高)
3、二者比较
![](https://img-blog.csdnimg.cn/50d436aca7f74f319510fb794e008f1e.png)
五、求模式串的 next 数组(手算)