C++数据结构(七字符串)


字符串及其基本操作

字符串的基本概念

字符串:由零个或多个字符组成的字符序列。记作:s=“s1,s2,s3”。
空串:长度为零叫空串;
空白串:一个或多个空白格组成的串空白串;
子串:串中任意个连续字符组成的子序列称为该串的子串;
主串:包含所有子串的串叫主串;
串变量+串常量:变量 + 常量
串比较与串相等  字符集与编码

字符串的基本操作

? 都没实现 求串长+串赋值+串拼接+求子串+串比较+子串定位+串插入+串删除+串替换 ?

字符串的定长顺序存储及基本操作

串数据元素类型为字符型的线性表(存储结构)。

字符串的定长顺序存储

字符串串尾存储一个不会在串中出现的特殊字符作为串的终结符(\0)。
设置定长串存储空间。用第0号单元存放实际长度,串存放在MAXIZE个单元中,字符的序号和存储位置一致,应用更方便。

定长顺序串的基本操作

?: 串拼接操作+求子串操作+串操作比较

模式匹配

字符串的模式匹配:定位子串
蛮力匹配算法(BF):很好经典基础
KMP思想:防止主串指针回溯(从头再来),一条路走到黑,好马不吃回头草……
希望在某趟主串元素Si和子串Tj匹配失败后,主串指针i不回溯,子串T移动到和主串对应的某个位置上,使得Tk对准Si继续向右前行。关键是k!主串一直前进(后移),子串利用next函数计算子串指针移动位置K(匍匐前进)。
准备工作:next函数难点(看一遍有点难理解,两遍OK)计算K
例题:主串:s=“acabaabaabcacaabc” 子串:t=“abcaababc”。
过程示意:
在这里插入图片描述
重点:(敲黑板了)next函数(推导过程):
已经匹配的字符串主串 s 和子串 t 在进行一次匹配(匹配成功k个元素,使用匹配成功的子串k个元素和主串k个元素在匹配,把前面以匹配的又分割成一个匹配,有些递归思想的那)参考
在这里插入图片描述

字符串的堆存储

字符串名的存储映像

串名的存储映像是串名——串值内存分配对照表,也称为索引表。

//带串长的索引表
typedef struct {
	char name[MAXNAME];//串名
	int length;//串长
	char *stradr;//起始地址
}LNode;
//带末尾指针的索引表
typedf struct{
	char name[MAXNAME];
	char *ctradr,*endr;
}ENode;
//带特征位置的索引表
typedef struct{
	char name[MAXNAME];
	int tag;
	union {
		char *stradr;
		char value[3];
		}uval;
}TNode;

在这里插入图片描述

堆存储结构

在内存中开辟能存储足够多串的、地址连续的存储空间,作为应用程序中所有串的可利用存储空间,即堆存储空间。


字符串的链式存储

中文分词
遗传算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Echo一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值