串(字符串)

article/2025/8/27 15:22:29

串的定义

串是由零个或多个字符组成的有限序列,又名叫字符串。一般记为s=“a1a2…an”(n>=0),其中s是串的名称,用双引号括起来的字符序列是串的值,注意引号不属于串的内容。串中的字符数目n称为串的长度。零个字符的串称为空串

下面是一些需要注意的基本概念:

(1)序列:说明串的相邻字符之间具有前驱和后继的关系

(2)空格串:是只包含空格的串。它和空串是不同的,有内容,有长度,而且可以不止一个空格

(3)子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串

(4)子串在主串中的位置就是子串的第一个字符在主串中的序号

串的比较

串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号。

计算机中的常用字符是使用标准的ASCII编码,更准确一点是由7位二进制数表示一个字符,总共可以表示128个字符。后来发现一些特殊符号,128个不够用,于是扩展ASCII码由8位二进制数表示一个字符,总共可以表示256位。后面又由于世界各地各种语言的差异,256个字符肯定不够表示,出现了Unicode编码,比较常用的是由16位的二进制数表示一个字符,总共可以表示6.5万,足够表示世界上所有语言的所有字符。当然为了兼容ASCII码,Unicode的前256个字符与ASCII码完全相同

那么对于两个不同的串,我们如何判定它们的大小呢?

给定两个串:s=“a1a2…an”,t=“a1a2…am”,当满足以下条件之一时,s<t.

(1)n<m,且ai=bi(i=1,2,…,n)。

(2)存在某个k<=min(m,n),使得ai=bi(i=1,2,…,k-1),ak<bk

串的抽象数据类型

串中最常见的操作就是查找子串位置、得到指定位置子串、替换子串等操作。西面是抽象数据类型的定义:

ADT 串(string)
Data串中元素仅由一个字符组成,相邻元素具有前驱和后继关系
OperationStrAssign(T,*chars):生成一个其值等于字符串常量chars的串T。StrCopy(T,S):串S存在,由串S复制得到串T。ClearString(S):串S存在,将串清空。StringEmpty(S):若串S为空,返回true,否则返回falseStrLength(S):返回串S的元素个数,即串的长度。StrCompare(S,T):若S>T,返回值>0,若相等,返回0,若S<T,返回值<0Concat(T,S1,S2):用T返回由S1和S2连接而成的新串。SubString(Sub,S,pos,len):若串S存在,1<=pos<=StrLength(S),0<=len<=StrLength(S)-pos+1,用Sub返回串S的第pos个字符起长度为len的子串。Index(S,T,pos):串S和T存在,T是非空串,1<=pos<=StrLength(S)。若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置,否则返回0.Replace(S,T,V):串S、T和V存在,T是非空串。用V替换主串S中出现的所有与T相等的不重叠的子串。StrInsert(S,pos,T):串S和T存在,1<=pos<=StrLength(S)+1。在串S的第pos个字符之前传入串TStrDelete(s,pos,len):串S存在,1<=pos<=StrLength(S)-len+1。从串S中删除第pos个字符起长度为len的子串。
endADT

下面以Index函数的实现为例进行一个简单说明。

/*T为非空串。若主串中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回0*/
int Index(String S,String T,int pos){int n,m,i;String sub;if(pos>0){//得到主串S的长度n = StrLength(S);//得到子串T的长度m=StrLength(T);i = pos;while(i<= n-m+1){//取主串第i个位置,长度与T相等子串给subSubString(sub,S,i,m);if(StrCompare(sub,T) != 0){++i;}else{return i;}}}return 0;
}

串的存储结构

串的顺序存储

串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。一般是用定长数组来定义。这种存储方式通常是有问题的,因为字符串的操作,如两串的concat、新串的insert,以及字符串的替换replace,都有可能使得串序列的长度超过了数组的长度MaxSize。

串的链式存储

对于串的链式存储结构,与线性表相似,但由于串结构的特殊性,结构中的每个元素数据是一个字符,如果也简单的应用链表存储串值,一个结点对应一个字符就会存在很大的空间浪费。因此一个结点可以存放一个字符,也可以考虑存放多个字符,最后一个结点若是未被占满时,可以用“#”或其他非串值字符补全,如下:
串的链式存储


http://chatgpt.dhexx.cn/article/ksEHrohS.shtml

相关文章

【数据结构】串(一)—— 串的基础知识

【数据结构】串&#xff08;一&#xff09;—— 串的基础知识 前言一、串类型的定义二、串的三种存储结构存&#xff08;1&#xff09;定长顺序存储&#xff08;2&#xff09;变长分配存储表示&#xff08;堆分配&#xff09;&#xff08;3&#xff09;块链存储三种存储结构的总…

串/并转换

串/并转换是高速数据流处理的重要技巧之一。串/并转换的实现方法多种多样&#xff0c;根据数据的顺序与数量的要求&#xff0c;可以选用寄存器、双口RAM&#xff08;Dual RAM&#xff09;、SRAM、SDRAM、FIFO等实现。对于数量比较小的设计可以采用移位寄存器完成串/并转换。 图…

数据结构-串

目录 一、串的定义 1、串的定义 2、串的一些概念 二、串的存储结构 三、顺序串 1、顺序串定义 2、顺序串的基本运算 &#xff08;1&#xff09;代码部分 &#xff08;2&#xff09;结果演示 一、串的定义 1、串的定义 串是有零个或或多个字符组成的有限序列&#xf…

串并转换

1.并转串 module b2c(clk,ain,rst,bout,load,ready);//并转串input clk,rst,load;input [7:0] ain;output reg bout;output reg ready;reg [7:0] temp;always (posedge clk or posedge rst)beginif(rst)begintemp<8dx;bout<1bx;ready1b1;//复位时可以接收输入数据endels…

串和数组.

目录 串 基本知识 串的模式匹配算法 BF算法 KMP算法 数组 基本知识 二维数组 矩阵 对称矩阵 三角矩阵 对角矩阵 串 基本知识 1.串是一种特殊的线性表&#xff0c;其特殊性体现在是一个字符&#xff08;重点&#xff09;。 串值也可以用链表来存储&…

串及其应用

一、实验目的&#xff1a; &#xff08;1&#xff09;掌握串的顺序存储结构及定长字符串的基本操作。 &#xff08;2&#xff09;掌握串的BF和KMP模式匹配算法 二、实验原理 串是一种特殊的线性表&#xff0c;其特性体现在数据元素的一个字符&#xff0c;即串是一种内容受限的…

数据结构——串

目录 1.串的定义与基本操作 1.1定义 1.2基本操作 2.串的存储结构 2.1顺序存储 2.2链式存储 3.字符串的模式匹配算法&#xff08;“查找”章节&#xff09; 3.1朴素模式匹配算法 3.2KMP算法 3.2.1算法思想 3.2.2算法代码实现 3.2.3求next数组和nextval数组&#xff…

数据结构之串

1、串的概念 字符串简称串&#xff0c;是一种特殊的线性表&#xff0c;它的数据元素仅由一个字符组成。 2、串的定义 串(String)是由零个或多个字符组成的有限序列&#xff0c;又称字符串。 其中s是串名,用双引号括起来的字符序列为串值&#xff0c;但引号本身并不属于串的内容…

串的详细讲解

1 串的基本概念 1.1 串的定义 串&#xff1a;( string)(或字符串)是由零个或多个字符组成的有限序列&#xff0c;一般记为s...&#xff0c;其中&#xff0c;s是串的名&#xff0c;用单引号括起来的字符序列是串的值&#xff1b;(1<i≤n)可以是字母、数字或其他字符&#xff…

串(数据结构)

一、 串类型的定义 串的定义 串&#xff08;string&#xff09;&#xff08;或字符串&#xff09;是由零个或多个字符组成的有序序列&#xff0c;一般记为 S”a1a2…an” (n>0) 其中&#xff0c;s是串的名&#xff0c;用双引号括起来的字符序列是串的值&#xff1b;ai (…

数据结构:串(String)【详解】

友情链接&#xff1a;数据结构专栏 目录 串【知识框架】一、串的定义二、串的存储结构1、定长顺序存储表示2、堆分配存储表示3、块链存储表示 三、串的基本操作四、串的模式匹配&#xff08;重点&#xff09;1、简单的模式匹配算法2、KMP算法&#xff08;1&#xff09;字符串的…

idm下载器是免费的吗?有哪些功能

对于PC用户来说&#xff0c;拥有一款好用和快速的下载工具&#xff0c;对我们来说至关重要&#xff0c;可以极大提高我们的工作效率和PC用户体验。IDM可以实现高速下载&#xff0c;其核心原理就是多线程下载&#xff0c;理论上可以达到带宽的峰值速度&#xff0c;深受用户的喜爱…

IDM下载器|Windows系统经典下载工具idm6.41|IDM如何在线视频下载工具 |下载视频教程

IDM全称Internet Download Manager,是一种将下载速度提高最多5倍的专业下载工具,支持大部分文件格式下载和基本所有的下载链接,无视网址本身下载限速,直接达到电脑该有的网速。 下载更快更可靠 下载INTERNET DOWNLOAD MANAGER(IDM下载器)开始您的极速下载旅程&#xff0c;永远…

【IDM】IDM下载器安装

下载链接 IDM_v6.41.2_Reрack.exe提取码: gj46 可能遇到的问题 1. 某些应用程序阻止了IDM集成到浏览器中 解决方法&#xff1a; 1.打开“Windows Update” 2.winr运行cmd 3.输入“services.msc” 4.找到“Windows Update”运行 5.关闭IDM&#xff0c;用管理员身份运行。…

【百度网盘下载】用工具IDM下载器

个人的一些学习资料和共享资料都是在百度网盘上&#xff0c;但是最近百度网盘的下载速度实在是太慢了。目前找到的比较好的方法是用IDM下载器。 微信公众号&#xff1a;北鼻不抠鼻 它详细介绍了这个软件的下载方式&#xff0c;还有相关配置。 重点是 绿色 嘿嘿 下载完在浏览器…

怎么在火狐浏览器中添加IDM下载器扩展?

Internet Download Manager&#xff08;简称“IDM”&#xff09;是一种将下载速度提高5倍&#xff0c;可以恢复和安排下载任务的工具。当在下载的过程中遇到连接丢失、网络问题、计算机关机或意外停电等问题&#xff0c;IDM可以全面恢复和重启中断的下载。 Internet Download M…

internet download manager(IDM下载器) 6.40

软件下载 internet download manager(IDM下载器)是一款很不错的下载工具。有了internet download manager软件&#xff0c;可以提高你下载文件的速度&#xff0c;如果您在下载文件的时候&#xff0c;突然没网了&#xff0c;您可以使用IMD下载器的续传功能非常的方便&#xff0…

idm下载器是什么软件?最新V6.41版本号Win下载工具

Internet Download Manager &#xff08;IDM&#xff09;是一种将下载速度提高多达 5 倍&#xff0c;恢复和安排下载的软件。全面的错误恢复和恢复功能将由于连接丢失&#xff0c;网络问题&#xff0c;计算机关闭或意外断电而重新启动中断的下载或中断下载。IDM下载器是一款先进…

IDM下载器插件 让浏览器不在限速

IDM下载器 可提速&#xff08;2到n倍&#xff09;的使用方法&#xff0c;让浏览器不在限速 前言 IDM 最佳的 Windows 下载工具 官方网址: http://www.internetdownloadmanager.com/. 尽管现在要用到「下载工具」的时间相比过去有所减少&#xff0c;但电脑上总要备一款以防不…

IDM下载器免费高质量的Win下载工具无使用限制

这是Windows 平台上的一款下载软件&#xff0c;它支持不同类型的浏览器&#xff0c;几乎能下载网页中所有的数据&#xff0c;还不会弹出广告。internetdownloadmanager(IDM下载器)是一款很不错的下载工具&#xff0c;很多人使用&#xff0c;这个软件好处就是免费 网上可以搜索到…