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

串的基本操作--数据结构

目录

一、串的基本概述

二、串的存储结构

2.1定义属性存储结构

串长有两种表示方法: 

1、用一个额外的变量length来存放串的长度;

2、串值后面加一个不计入串长的结束标记字符“\0”,此时的串长为隐含值。 

2.2堆的顺序存储结构  

三、串的基本操作 

3.1在模式串中pos位置查找长度为len的子串

 3.2直接返回模式串的长度

 3.3比较两个字符串之间的大小长短

 3.4朴素模式匹配算法

原文 


一、串的基本概述

  • 串是由零个或多个字符组成的有限序列;
  • 串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串相应地称为主串;
  • 子串在主串中的位置以子串的第一个字符在主串中的位置来表示;
  • 当两个串的长度相等且每个对应位置的字符都相等时,称这两个串是相等的;
  • 一个或多个空格(空格是特殊字符)组成的串称为空格串,其长度为串中空格字符的个数。


二、串的存储结构


存储结构:顺序存储与链式存储。考虑到存储效率和算法的方便性,串多采用顺序存储结构。

类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。在串的定长顺序存储结构中,为每个串变量分配一个固定长度的存储区,即定长数组。

2.1定义属性存储结构

串长有两种表示方法: 
1、用一个额外的变量length来存放串的长度;
2、串值后面加一个不计入串长的结束标记字符“\0”,此时的串长为隐含值。 

我们这里采用方法1

​#define MAX_SIZE 25  //预定义最大串长为255
typedef struct{char ch[MAX_SIZE];   //每个分盘存储一个字符int length;         //串的实际长度
}SString;

2.2堆的顺序存储结构  

// 堆的顺序存储结构
struct HString{char *ch;     //按串长分配存储区,ch指向串的基地址int length;   //串的长度
} ;

三、串的基本操作 

3.1在模式串中pos位置查找长度为len的子串

//求子串
bool SubString(SString& Sub, SString S, int pos, int len) {if (pos + len - 1 < S.length) {return false;}for (int i = pos; i < pos + len; i++) {Sub.date[i] = S.date[i];}Sub.length = len;
}

 3.2直接返回模式串的长度

//求字符串长度
int length(SString S) {return S.length;
}

 3.3比较两个字符串之间的大小长短

//比较操作
bool compare(SString a,SString b) {for (int i = 0; i < a.length & i < b.length; i++) {if (a.date[i] != b.date[i]) {return a.date[i] - b.date[i];}}return a.length - b.length;
}

 3.4朴素模式匹配算法

//定位操作
int index(SString a, SString b) {SString Sub;int i = 1;int n = length(a), m =length(b);while (i <= n - m + 1) {SubString(Sub, a, i, m);if (compare(Sub, b) == 0)return i;}return 0;
}

原文 

#include<bits/stdc++.h>
using namespace std;
#define MAX_SIZE  23
struct SString {char date[MAX_SIZE];int length;
};
//求子串
bool SubString(SString& Sub, SString S, int pos, int len) {if (pos + len - 1 < S.length) {return false;}for (int i = pos; i < pos + len; i++) {Sub.date[i] = S.date[i];}Sub.length = len;
}
//比较操作
bool compare(SString a,SString b) {for (int i = 0; i < a.length & i < b.length; i++) {if (a.date[i] != b.date[i]) {return a.date[i] - b.date[i];}}return a.length - b.length;
}
//求字符串长度
int length(SString S) {return S.length;
}
//定位操作
int index(SString a, SString b) {SString Sub;int i = 1;int n = length(a), m =length(b);while (i <= n - m + 1) {SubString(Sub, a, i, m);if (compare(Sub, b) == 0)return i;}return 0;
}
//在主串里面查找模式串
int index2(SString a, SString b) {int i, j = 1;while (i <= length(a) && j <= length(b)) {if (a.date[i] == b.date[j]) {i++;j++;}else {i = i - j + 2;j = 1;}}if (j > length(b))return i-length(b);else return 0;
}

相关文章:

串的基本操作--数据结构

目录 一、串的基本概述 二、串的存储结构 2.1定义属性存储结构 串长有两种表示方法: 1、用一个额外的变量length来存放串的长度&#xff1b; 2、串值后面加一个不计入串长的结束标记字符“\0”&#xff0c;此时的串长为隐含值。 2.2堆的顺序存储结构 三、串的基本操…...

C++17 数学特殊函数:探索标准库中的强大工具

文章目录 1. 什么是数学特殊函数&#xff1f;2. C17 中的特殊函数2.1 贝塞尔函数2.2 勒让德函数2.3 椭圆积分2.4 伽马函数2.5 误差函数 3. 实际应用场景3.1 科学计算3.2 工程应用3.3 数据分析 4. 总结 在 C17 中&#xff0c;标准库引入了一系列数学特殊函数&#xff0c;这些函数…...

多模态特征提取与融合助力高光谱+LiDAR数据分类性能飞跃

目录 论文解读 总体架构 CMIIE 模块工作模式 MLFFC模块工作模式 论文解读 提出了一种新的多模态特征提取模块CMIIE,可以捕获高光谱和LiDAR数据之间的互补信息。设计了一个多层特征融合分类模块MLFFC,通过对不同层级的特征进行融合来提高分类性能。使用对抗学习策略来指导网…...

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施&#xff0c;通过技术架构革新与功能模块整合&#xff0c;重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系&#xff0c;将分散的创作、存储、审核及分发环节纳入统一平台管理。基…...

网络安全攻防演练——RT实战技巧篇

前言 又是一年hw招聘季&#xff0c;每年hw行动都会吸引大量网络安全从业者参加。同时也会有很多热爱网络安全但无从下手的网安爱好者参与。笔者旨在对网络安全有想法但是没有方向的师傅做一个简单的方向的了解&#xff0c;让师傅有方向去学习。 RT(红队) 1.引入 首先红队的…...

【MySQL】第六弹---数据库表约束详解:从空属性到主键的全方位指南

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 表的约束 1.1 空属性 1.2 默认值 1.3 列描述 1.4 zerofill 1.5 主键 1. 表的约束 真正约束字段的是数据类型&…...

JMeter工具介绍、元件和组件的介绍

Jmeter功能概要 JDK常用文件目录介绍 Bin目录&#xff1a;存放可执行文件和配置文件 Docs目录&#xff1a;是Jmeter的API文档&#xff0c;用于开发扩展组件 printable_docs目录&#xff1a;用户帮助手册 lib目录&#xff1a;存放JMeter依赖的jar包和用户扩展所依赖的Jar包…...

vue3 在element-plus表格使用render-header

在vue2中 element表格render-header 源码是有返回h()函数的 在vue3 element-plus 表格源码 render-header函数没有返回h函数了 所以需要用render-header方法中创建虚拟DOM节点的话需要引用h方法 <el-table-column header-align"right" align"right" …...

IM 即时通讯系统-04-聊一聊 IM 要如何进行技术选型

IM 系列 IM 文档开源库 首先&#xff0c;后端技术选型是Java。Java有很多优势&#xff0c;比如跨平台性、丰富的生态系统、高性能和成熟稳定。这些都是为什么选择Java的原因。接下来&#xff0c;前端选用了Vue&#xff0c;因为它具有渐进式框架的特点、响应式数据绑定、组件化…...

机器学习_19 集成学习知识点总结

集成学习&#xff08;Ensemble Learning&#xff09;是一种强大的机器学习范式&#xff0c;通过组合多个模型的预测结果来提高整体性能和泛化能力。它在分类、回归和特征选择等任务中表现出色&#xff0c;广泛应用于各种实际问题。今天&#xff0c;我们就来深入探讨集成学习的原…...

自动驾驶---基于深度学习模型的轨迹预测

1 背景 自动驾驶任务中&#xff0c;轨迹预测一直以来是一个难题。 在复杂交通场景中&#xff0c;即使驾驶员最终意图确定&#xff0c;但决策过程中其他车辆的动态行驶路径的即时变化会导致自车路径呈现多模态属性&#xff0c;即车辆的未来轨迹有多种可能性。对车辆的多模态轨迹…...

线性模型 - 二分类问题的损失函数

在二分类问题中&#xff0c;损失函数用于量化模型预测与真实标签之间的差异&#xff0c;以指导模型参数的调整。本文&#xff0c;我们来一起学习一下常见的损失函数及其直观解释。 一、核心二分类损失函数及通俗理解 1. 0-1损失&#xff08;Zero-One Loss&#xff09; 公式&…...

string类详解(上)

文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...

c# —— StringBuilder 类

StringBuilder 类是 C# 和其他一些基于 .NET Framework 的编程语言中的一个类&#xff0c;它位于 System.Text 命名空间下。StringBuilder 类表示一个可变的字符序列&#xff0c;它是为了提供一种比直接使用字符串连接操作更加高效的方式来构建或修改字符串。 与 C# 中的 stri…...

今日行情明日机会——20250217

2025年02月17日行情 后续投资机会分析 根据最新盘面信息&#xff0c;以下板块和个股具备潜在投资机会&#xff0c;需结合市场动态和基本面进一步验证&#xff1a; 1. 腾讯系AI&#xff08;18家涨停&#xff09; 核心逻辑&#xff1a;涨停家数最多&#xff08;18家&#xff0…...

Openshift或者K8S上部署xxl-job

本案例以版本2.3.0为例 1. 源码编译成jar包 source code: https://github.com/xuxueli/xxl-job/blob/2.3.0/ 这里我们会得到两个jar包&#xff1a;xxl-job-admin-2.3.0.jar和xxl-job-executor-sample-springboot-2.3.0.jar 2. 初始化mysql数据库 sql code: https://github.…...

vite+vue3开发uni-app时低版本浏览器不支持es6语法的问题排坑笔记

重要提示&#xff1a;请首先完整阅读完文章内容后再操作&#xff0c;以免不必要的时间浪费&#xff01;切记&#xff01;&#xff01;&#xff01;在使用vitevue3开发uni-app项目时&#xff0c;存在低版本浏览器不兼容es6语法的问题&#xff0c;如“?.” “??” 等。为了方便…...

使用 Apache PDFBox 提取 PDF 中的文本和图像

在许多应用中&#xff0c;我们需要从 PDF 文件中提取文本内容和嵌入的图像。为了实现这一目标&#xff0c;Apache PDFBox 是一个非常实用的开源工具库。它提供了丰富的 API&#xff0c;可以帮助我们轻松地读取 PDF 文件、提取其中的文本、图像以及其他资源。 本文将介绍如何使…...

centos7arm架构安装mysql服务

1.安装新版mysql前&#xff0c;需将系统自带的mariadb卸载 rpm -qa|grep mariadb //查找mariadb的rpm包 rpm -e mariadb-libs-5.5.56-2.el7.x86_64 //卸载mariadb包 2.去官网下载对应mysq包https://downloads.mysql.com/archives/community/ 3.解压下载包&…...

【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-3微调2.2.3.2 zero-2微调2.2.3.3 单卡Lora微调 2.3 踩坑经验2.3.1 问题一&#xff1a;ValueError: Undefined dataset xxxx in dataset_info.json.2…...

后端生成二维码,前端请求接口生成二维码并展示,且多个参数后边的参数没有正常传输问题处理

一、后端代码 1、controller GetMapping("/generateQRCode/{url}")ApiOperation(value "生成url链接二维码",notes "生成url链接二维码")public JsonResult<NewsQRCodeVo> generateQRCode(PathVariable String url,HttpServletRespons…...

NBT群落物种级丰度鉴定新方法sylph

文章目录 简介为什么选择Sylph&#xff1f;Sylph的工作原理 Install使用解析成gtdb格式sylph 能做什么&#xff1f;sylph 不能做什么&#xff1f;ANI定义如何使用 sylph-utils 生成包含分类信息的配置文件耗时&#xff1a;66个样本耗时1h 转成easymicroplot可用数据 简介 Sylp…...

长视频生成、尝试性检索、任务推理 | Big Model Weekly 第56期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 COMAL:AConvergent Meta-Algorithm for Aligning LLMs with General Preferences 许多对齐方法&#xff0c;包括基于人类反馈的强化学习&#xff08;RLHF&#xff09;&#xff0c;依赖于布拉德利-特里&#…...

使用右侧值现象来处理一个word导入登记表的需求

需求也简单&#xff0c;导word文件用户登记表&#xff0c;有各部门的十几个版本&#xff08;为什么这么多&#xff1f;不知道&#xff09;。这里说下谈下我的一些代码做法&#xff1a; 需求分析&#xff1a; 如果能解决java字段和各项填的值怎么配对的问题&#xff0c;那么就…...

FRRouting配置与OSPF介绍,配置,命令,bfd算法:

文章目录 1、frrouting的配置&#xff1a;2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…...

基于ThinkPHP 5~8兼容的推荐算法类实现,

在现代推荐系统中&#xff0c;随着用户量和物品量的增长&#xff0c;传统的推荐算法可能会面临性能瓶颈。本文将介绍如何基于 ThinkPHP 实现一个高性能的推荐系统&#xff0c;结合显性反馈&#xff08;如兴趣选择&#xff09;、隐性反馈&#xff08;如观看时长、评论、点赞、搜…...

使用Python爬虫实时监控行业新闻案例

目录 背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结 在互联网时代&#xff0c;新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时…...

kong身份认证插件详解之Basic Auth插件

1.3、Basic Authentication 支持基于用户名和密码的基本认证&#xff0c;通常用于简单的身份验证场景。 1.3.1、环境准备 1.3.1.1、创建一个服务&#xff0c;basic-auth-service curl -i -s -X POST http://localhost:8001/services \--data namebasic-auth-service \--dat…...

Copilot基于企业PPT模板生成演示文稿

关于copilot创建PPT&#xff0c;咱们写过较多文章了&#xff1a; Copilot for PowerPoint通过文件创建PPT Copilot如何将word文稿一键转为PPT Copilot一键将PDF转为PPT&#xff0c;治好了我的精神内耗 测评Copilot和ChatGPT-4o从PDF创建PPT功能 Copilot for PPT全新功能&a…...

用React实现一个登录界面

使用React来创建一个简单的登录表单。以下是一个基本的React登录界面示例&#xff1a; 1. 设置React项目 如果你还没有一个React项目&#xff0c;你可以使用Create React App来创建一个。按照之前的步骤安装Create React App&#xff0c;然后创建一个新项目。 2. 创建登录组…...

前端布局的方式有哪些

前端布局的方式有哪些 在前端开发里&#xff0c;布局就像是装修房子&#xff0c;把不同的东西合理地摆放在合适的位置&#xff0c;让整个空间既美观又实用。下面给你介绍几种常见的前端布局方式&#xff1a; 1. 普通流布局&#xff08;标准文档流布局&#xff09; 这就像是按…...

seata集成nacos

#nacos集成nacos并配置mysql数据源 1. 所需依赖 <!--seata 分布式事务--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency> 2. 打开seata目录&#xff…...

第29篇 基于ARM A9处理器用C语言实现中断<五>

Q&#xff1a;怎样设计基于ARM A9处理器的C语言程序使用定时器中断实现实时时钟&#xff1f; A&#xff1a;在上一期的程序中添加A9 Private Timer作为第三个中断源&#xff0c;配置该定时器使其每隔0.01秒产生一次中断。使用该定时器使全局变量time的值递增&#xff0c;并将…...

deepseek多列数据对比,联想到excel的高级筛选功能

目录 1 业务背景 ​2 deepseek提示词输入 ​3 联想分析 4 EXCEL高级搜索 1 业务背景 系统上线的时候经常会遇到一个问题&#xff0c;系统导入的数据和线下的EXCEL数据是否一致&#xff0c;如果不一致&#xff0c;如何快速找到差异值&#xff0c;原来脑海第一反应就是使用公…...

C 程序多线程拆分文件

C 程序多线程拆分文件 在C语言中&#xff0c;实现多线程来拆分文件通常需要借助多线程库&#xff0c;比如 POSIX 线程库&#xff08;pthread&#xff09;或者 Windows 的线程库&#xff08;CreateThread 或类似的函数&#xff09;。下面我将分别展示在 Linux 和 Windows 环境下…...

mysql 使用 CONCAT、GROUP_CONCAT 嵌套查询出 json 格式数据

tb_factory表由 factory_code 和 factory_name 字段&#xff0c;查询出如下所示效果&#xff1a; {"factory_0001": "工厂1","factory_0002": "工厂2",... } select sql&#xff1a; SELECT CONCAT( "{",GROUP_CONCAT( C…...

Leetcode 2466. Count Ways To Build Good Strings

Problem Given the integers zero, one, low, and high, we can construct a string by starting with an empty string, and then at each step perform either of the following: Append the character ‘0’ zero times.Append the character ‘1’ one times. This can …...

分布式 IO 模块:食品罐装产线自动化与高效运行的推手

在当今竞争激烈的罐装视频生产行业&#xff0c;如何实现产线的自动化与连续性高效运行&#xff0c;成为了众多企业追求的核心目标。明达技术推出的MR30分布式 IO 模块作为一种先进的工业控制技术&#xff0c;正逐渐崭露头角&#xff0c;为食品罐装产线带来了前所未有的变革。 痛…...

rustdesk编译修改名字

最近&#xff0c;我用Rust重写了一个2W行C代码的linux内核模块。在此记录一点经验。我此前没写过内核模块&#xff0c;认识比较疏浅&#xff0c;有错误欢迎指正。 为什么要重写&#xff1f; 这个模块2W行代码量看起来不多&#xff0c;却在线上时常故障&#xff0c;永远改不完。…...

MySQL 窗口函数:功能、使用场景与性能优化

MySQL 8.0 引入了一个强大的新特性——**窗口函数&#xff08;Window Functions&#xff09;**。它为数据分析和复杂查询提供了极大的便利&#xff0c;但同时也可能带来性能问题。本文将带你快速了解窗口函数的功能、使用场景以及如何优化性能。 --- ## **什么是窗口函数&#…...

数据权限校验实践

数据权限控制实践 最近在实习中为公司项目完成一个文件数据权限校验代码的转换重构&#xff0c;写这篇博客来记录前后两种权限校验的实现方案与相关概念 原实现方案&#xff1a;RBAC-基于角色的访问控制 RBAC&#xff08;Role-Based Access Control&#xff09; RBAC 是一种常…...

spring boot对接clerk 实现用户信息获取

在现代Web应用中&#xff0c;用户身份验证和管理是一个关键的功能。Clerk是一个提供身份验证和用户管理的服务&#xff0c;可以帮助开发者快速集成这些功能。在本文中&#xff0c;我们将介绍如何使用Spring Boot对接Clerk&#xff0c;以实现用户信息的获取。 1.介绍 Clerk提供…...

公网远程家里局域网电脑过程详细记录,包含设置路由器。

由于从校内迁居小区,校内需要远程控制访问小区内个人电脑,于是早些时间刚好自己是电信宽带,可以申请公网ipv4不需要花钱,所以就打电话直接申请即可,申请成功后访问光猫设备管理界面192.168.1.1,输入用户名密码登录超管(密码是网上查下就有了)设置了光猫为桥接模式,然后…...

自制简单的图片查看器()

图片格式&#xff1a;支持常见的图片格式&#xff08;JPG、PNG、BMP、GIF&#xff09;。 import os import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTkclass ImageViewer:def __init__(self, root):self.root rootself.root.…...

25/2/17 <嵌入式笔记> 桌宠代码解析

这个寒假跟着做了一个开源的桌宠&#xff0c;我们来解析下代码&#xff0c;加深理解。 代码中有开源作者的名字。可以去B站搜着跟着做。 首先看下main代码 #include "stm32f10x.h" // Device header #include "Delay.h" #include &quo…...

Kafka偏移量管理全攻略:从基础概念到高级操作实战

#作者&#xff1a;猎人 文章目录 前言&#xff1a;概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…...

python中使用日期和时间差:datetime模块

datetime模块的表示时间的有 datetime.datetime #时间包含年月日时分秒毫秒 datetime.date #时间只包含年月日 datetime.time #只包含时分秒 获取当前时间 import datetime now datetime.datetime.now() print(now)得到 atetime中的年月日时分秒可以分别取出来 import da…...

申论对策建议类【2022江苏B卷第一题“如何开展网络直播”】

材料&#xff1a; 近年来&#xff0c;公安交管部门通过网络直播&#xff0c;将执法过程和执法细节以视频形式呈现在公众面前&#xff0c;吸引“围观”、组织点评&#xff0c;让执法过程变成一堂生动的法治公开课。 “各位网友&#xff0c;大家好&#xff01;这里是‘全国交通…...

Blazor-父子组件传递任意参数

在我们从父组件传参数给子组件时&#xff0c;可以通过子组件定义的[Parameter]特性的公开属性进行传值&#xff0c;但是当我们需要传递多个值的时候&#xff0c;就需要通过[Parameter]特性定义多个属性&#xff0c;有没有更简便的方式&#xff1f; 我们可以使用定义 IDictionar…...

Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅

摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...