1. 串的重要知识点
(1)串的三种存储结构
- 顺序存储
eg:String str[100];
需要注意的是:下标为0的存储单元处存储串的长度 - 堆存储结构
堆存储方式通常有一个头结点
typedef struct { //自定义一种等同于structXXX的数据类型String
node *head;
int length;
}String;
String str;
str.head=(node*)molloc(sizeof(node));
- 块链式存储
块内部使用顺序存储结构,而块之间使用链式存储结构
typedef struct{
Node *head,*tail;
int length;
}String_block;
typedef struct{
Node *next;
char c[30];
}Node;
(2)串的朴素匹配算法
子串定位又称串的模式匹配,是串的应用中最重要的运算之一。
匹配算法的思想:在目标串S中查找模式为T的子串的位置。
匹配算法的过程:从两个串的第一个字符处依次比较,如果对应元素相同,则继续比较两个串的下一个字符,反之则目标串S的下标后移,再与模式串比较,直至找到。
(3) 串的常用方法
StrAssign(t,chars)
初始条件:chars是一个字符串常量
操作结果:生成一个值为chars的串t.
StrConcat(s,t)
初始条件:串s,t已存在
操作结果:将串t连接到串s的后面形成新串存放在s中
Strlength(t)
初始条件:字符串t已存在
操作结果:返回串t中的元素个数,称为串长
SubString(s,pos,len,sub)
初始条件:串s已存在,1<=pos<=Strlength(s),且0<=len<=Strlength(s)-pos+1
操作结果:用sub来返回串s的第pos个字符起长度为len的子串
串的匹配算法
(1)需求
判断字符串是否为回文字符串,若是,返回1,否则返回0
(2)思路分析
- 首先理解回文的概念,即正反读一样,所以我们就要解决如何将字符串逆置,从而考虑有先进后出特点的栈;
- 将字符串依次入栈;
- 依次出栈并与字符串对应下标元素比较,若存在不相等的元素,则不是回文字符串。
(3)代码实现
int IsHuiwen( char *t)
{//判断t字符是否为回文,若是,返回1,否则返回0
SeqStack s;
int i , len;
char temp;
len=strlen(t); //求字符串长度
for ( i=0; i<len; i++)//将所有字符入栈
Push( &s, t[i]);//&s:取变量s的地址
for ( j=0; j<len; j++)
{// 每弹出一个字符与相应字符比较
temp=Pop (&s);
if( temp!=t[j])
return 0 ;// 不等则返回0
}
return 1 ; // 比较完毕均相等则返回 1
}
(4) 需要注意的点
- 用strlen(ElemType *E)来获取字符串的长度,用sizeof(ElemType *E)来获取内存空间长度;