当前位置: 首页 > news >正文

数据结构(其五)--串

目录

12.串

12.1 基本操作

12.2 串的存储结构

12.3 字符串的模式匹配算法

(1).朴素模式匹配算法

(2).KMP算法

        i.next[]数组的求解

        ii.next[]数组的优化——nextval数组

        iii.手算nextval数组

        iiii.机算nextval数组 + KMP函数


12.串

        串,即字符串(string),由零个或多个字符组成的有限序列。串也是线性表。

        子串,串中任意个连续的字符组成的序列。

        主串,包含子串的串。

        空串,没有字符的串,空格串不是空串。

        字符在串中位置的描述,S = "a1a2a3...",其编号由1开始,另外,一般都是指的该字符首次出现的位置,另外的另外,空格也算作字符。

        子串在主串中的位置,以子串第一个字符在主串中的位置来代替。

12.1 基本操作

        串的操作一般作用于子串,而非单个的字符。

        StrAssign(&T, chars):赋值,把chars 赋值给T.

        StrCopy(&T, S):复制,把S 复制给T.

        StrEmpty(S):判空,判断S 是否为空串,为空,返回true;未空,返回false.

        StrLength(S):求串长

        ClearString(&S):清空,将S串变为空串。(内存空间并没有收回)(所以直接length = 0,在逻辑上清除就可以了)

        DestoryString(&S):销毁,回收串的存储内存空间。

        Concat(&T, S1, S2):串的联接,用T 返回S1与S2 联接成的新串。

        SubString(&Sub, S, pos, len):求子串,用Sub返回S串的从第pos个字符往后len个的字符子串。

        Index(S, T):定位,尝试寻找子串T在主串S中的位置,返回首次出现的位置,若没有,则返回0.

        StrCompare(S, T):比较大小,从各串的第一个字符开始依次比较,字符的ASCll码值,值相同,则比较各串的下一位字符,先出现更大的字符的串,更大。

        当串中含有空格字符,且串中非空格字符都相等,则更长的串更大,比较时是先忽略空格的。

        只有当串的字符、长度都相等时,串才相等。

12.2 串的存储结构

        以下代码是串的存储结构以及一些重要的基本操作

//顺序
#define MAXSIZE 255		//预先定义的最大串长
class SString
{
public:char ch[MAXSIZE];	//对字符的储存int length;			//记录串的实际长度//也可以省去此变量,用ch[0]储存长度//为了使下标统一和变量分离,所以之后会将ch[0]废弃不用,并继续使用length
};
//顺序(动态分配)(堆分配存储)
class HString
{
public://构造函数HString(){ch = new char();length = 0;}char* ch;int length;
};
//链式
class StringNode
{
public:char ch[4];				//如果只是ch ,不是数组的话,单个节点的储存密度非常低,为了提高内存利用率,所以采用每个结点都存储一个小数组的方法StringNode* next;
};
using LString = StringNode*;//求串长
int StrLength(SString S)
{return S.length;
}
http://www.lryc.cn/news/419757.html

相关文章:

  • LeetCode Hot100 LRU缓存
  • GESP C++ 2024年06月一级真题卷
  • 在 Ubuntu Server 上配置静态 IP 地址
  • 数据结构——栈的讲解(超详细)
  • 三防平板助力MES系统,实现工厂移动式生产报工
  • WEB渗透Bypass篇-常规函数绕过
  • C++从入门到起飞之——string类的模拟实现 全方位剖析!
  • 数据库国产化大趋势下,还需要学习Oracle吗?
  • WebLogic
  • Aspose.Words.dll 插入模板表格,使用的是邮件合并MailMerge功能,数据源是DataTable或list对象,实例
  • 同时打开多个微信
  • MPU6050的STM32数据读取
  • 【微信小程序开发】——奶茶点餐小程序的制作(二)
  • Java 文件上传七牛云
  • 大语言模型生成无人系统(如机械臂、无人机等)可以执行的指令序列
  • 尚硅谷谷粒商城项目笔记——十、调试前端项目renren-fast-vue【电脑CPU:AMD】
  • Python 的元组和列表的区别是什么?
  • 【Impala】学习笔记
  • 视频汇聚平台EasyCVR接入移动执法记录仪,视频无法播放且报错500是什么原因?
  • 【Linux基础】Linux基本指令(二)
  • 全面介绍 Apache Doris 数据灾备恢复机制及使用示例
  • Python pandas常见函数
  • 行业落地分享:阿里云搜索RAG应用实践
  • 【SQL】温度比较
  • Istio 项目会往用户的 Pod 里注入 Envoy 容器,用来代理 Pod 的进出流量,这是什么设计模式?
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • 测试开发岗面试总结
  • 编程-设计模式 7:桥接模式
  • C语言----结构体
  • 基于HKELM混合核极限学习机多输出回归预测 (多输入多输出) Matlab代码