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;

在这里插入图片描述

堆存储结构

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


字符串的链式存储

中文分词
遗传算法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据结构字符串C是指在C语言中对字符串进行操作和处理的一种数据结构。它包括对字符串的拼接、删除、截取、转换、匹配、替换等常用功能的实现。该数据结构还涉及单字符串匹配和多模式匹配算法的详细讲解。另外,C中的字符(char)实际上是以ASCII码值存储的。字符常量使用单引号表示,如'a'、'A',对应的ASCII码值分别为97、65。字符常量与字符串常量(双引号括起来的)是有区别的,字符常量是单个字符,而字符串常量可以包含多个字符。C语言提供了一些特殊字符(如'\n'、'\r'、'\t')来表示换行、回车、制表等功能。引用的中的C模板实现的数据结构字符串类也提供了对字符串的各种操作,其中的匹配算法使用了基于KMP的快速匹配算法。这个字符串类具有良好的编码风格和详细的算法注释。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++数据结构字符串](https://blog.csdn.net/suren_jun/article/details/127561801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++数据结构字符串及KMP匹配算法](https://download.csdn.net/download/linxdef/9387482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C++字符串](https://blog.csdn.net/u014042772/article/details/125807000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Echo一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值