数据结构-串

article/2025/8/27 15:04:50

 

目录

一、串的定义

1、串的定义

2、串的一些概念

二、串的存储结构

三、顺序串

1、顺序串定义

2、顺序串的基本运算

(1)代码部分

(2)结果演示


一、串的定义

1、串的定义

串是有零个或或多个字符组成的有限序列,又称为字符串。

一般记为: (n为正整数),str中串名,(1<=i<=n),由字母、数字和其他字符组成,n为串的长度。

2、串的一些概念

(1)空串:长度为零的串,称为空串,不含任意字符。

(2)子串:串中任意个连续的字符组成的子序列称为该串的子串,其中空串是任意串的子串。

注:串、子串和空串等概念与集合的概念有着很多相似之处。

二、串的存储结构

串的存储结构主要分为顺序存储结构和链式存储结构两大类。

三、顺序串

1、顺序串定义

用一组地址连续的存储单元存储串值的字符序列。

2、顺序串的基本运算

(1)代码部分

#include <stdio.h>
#include<string.h>
#include <malloc.h>#define MaxSize 200
//串声明
typedef struct
{char data[MaxSize];int length;
}SqString;//串赋值
void Assign(SqString &s,char str[])
{int i=0;while(str[i]!='\0')          //遍历str的所有字符,数组以空字符'\0'标识串结束{s.data[i]=str[i];i++;}s.length=i;
}//销毁串
void DestroyStr(SqString s)
{
}
//串复制
void StrCopy(SqString &s,SqString t)
{int i;for(i=0;i<t.length;i++)s.data[i]=t.data[i];s.length=t.length;
}//串长度int StrLength(SqString s)
{return (s.length);
}
//判断串相等运算算法int StrEqual(SqString s,SqString t)
{int i=0;if(s.length !=t.length)          //串长不同时返回0return (0);else{for(i=0;i<s.length;i++)if(s.data[i]!=t.data[i])return 0;return 1;}
}//串连接运算算法SqString Concat(SqString s,SqString t)
{SqString r;int i,j;for(i=0;i<s.length;i++)r.data[i]=s.data[i];             //将s复制到rfor(j=0;j<t.length;j++)r.data[s.length+j]=t.data[j];   //将t复制到rr.length=i+j;return r;                           //返回r
}//子串运算SqString SubStr(SqString s,int i,int j)
{SqString t;int k;if(i<1 || i>s.length || j<1 || i+j>s.length+1)t.length=0;else{for(k=i-1;k<i+j;k++)t.data[k-i+1]=s.data[k];t.length=j;}return t;
}//查找子串位置运算算法int Index(SqString s,SqString t)
{int i=0,j=0;                             //i和j分别扫描主串s和子串twhile(i<s.length && j<t.length)          //两个串都没有扫描完{if(s.data[i]==t.data[j])             //对应字符相同时,继续比较下一对字符{i++;                             //继续后面两个字符的比较j++;}else                                 //否则,主串指针回溯重新开始下一次匹配{i=i-j+1;                         //i回退到原i的下一个位置j=0;                             //j从t的第一个字符开始}}if(j>=t.length)return i-t.length+1;elsereturn 0;
}//子串插入int InsStr (SqString &s,int i,SqString t)
{int j;if(i<1 || i>s.length+1)                     //位置参数错误返回0return 0;else{for(j=s.length-1;j=i-1;j--)            //将s.data[i-1..s.length-1]s.data[j+t.length]=s.data[j];      //后移t.length个位置for(j=0;j<t.length;j++)                //插入子串ts.data[i+j-1]=t.data[j];s.length=s.length+t.length;            //修改s串长度return 1;                              //成功插入返回1}
}//子串删除int DelStr(SqString &s,int i,int j)
{int k;if(i<1 || i>s.length || j<1 || i+j>s.length+1)return 0;else{for(k=i+j-1;k<s.length;k++)s.data[k-j]=s.data[k];s.length=s.length-j;return 1;}
}//子串替换
SqString RepStrAll(SqString s,SqString s1,SqString s2)
{int i;i=Index(s,s1);while(i>0){DelStr(s,i,s1.length);                   //从s中删除子串s1InsStr(s,i,s2);                           //在s中插入子串s2         i=Index(s,s1);}return s;
}
//输出串void DispStr(SqString s)
{int i;for(i=0;i<s.length;i++)printf("%c",s.data[i]);printf("\n");
}void main()
{SqString s1,s2,s3,s4,s5,s6,s7;Assign(s1,"abcd");printf("s1:");DispStr(s1);printf("s1 的长度: %d\n",StrLength(s1));printf("s1=>s2\n");StrCopy(s2,s1);printf("s2 :");DispStr(s2);printf("s1和s2 %s\n",(StrEqual(s1,s2)==1 ? "相同" : "不相同"));Assign(s3,"12345678");printf("s3 :");DispStr(s3);printf("s1和s3连接=>s4\n");s4=Concat(s1,s3);printf("s4:");DispStr(s4);printf("s3[2..5]=>s5\n");s5=SubStr(s3,2,4);printf("s5:");DispStr(s5);Assign(s6,"567");printf("s6:");DispStr(s6);printf("s6在s3中位置:%d\n",Index(s3,s6));printf("从s3中删除s3[3..6]字符\n");DelStr(s3,3,4);printf("s3:");DispStr(s3);printf("从s4中将s6替换成s1=>s7\n");s7=RepStrAll(s4,s6,s1);printf("s7:");DispStr(s7);DestroyStr(s1);DestroyStr(s2);DestroyStr(s3);DestroyStr(s4);DestroyStr(s5);DestroyStr(s6);DestroyStr(s7);
}

(2)结果演示

 


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

相关文章

串并转换

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;这个软件好处就是免费 网上可以搜索到…

idm下载器怎么下载网页视频?如何用idm自动下载网站文件?

随着互联网的快速发展&#xff0c;越来越多的资源都可以免费下载&#xff0c;而idm下载器凭借其独特的“多线程资源嗅探”&#xff0c;能轻松下载各种网页视频&#xff0c;因此idm也一直被称为下载神器&#xff0c;那idm下载器怎么下载网页视频&#xff0c;或者自动下载网站文件…

chrome中下载文档时设置成不使用idm下载器的方法

wyn enterprise中用到导出功能时&#xff0c;自动调用idm但往往下载报错。 如何关闭idm自动弹出并下载功能呢&#xff1f; 1、设置。 2、选项。

电脑版idm下载器好不好用?

IDM&#xff08;Internet Download Manager&#xff09;是Windows上一款非常好用的下载管理器。在功能方面&#xff0c;它是主流下载器中的佼佼者&#xff0c; 更获得多种奖项&#xff0c; 是。下面&#xff0c;我列出了自己在使用Internet Download Manager的一些实用技巧和窍…