字符串的基本操作(包括串赋值,串拼接,求子串,查找串,删除与插入等等)

article/2025/8/27 15:10:37

1.串的定义

  串(String)是零个或多个字符组成的有限序列。一般记作:S=“a1a2a3…an”,

其中,S是串名; “a1a2a3…an”是串值;ai(1in)可以是字母、数字或其它字符

串的长度:串中所包含的字符个数;

空串:长度为零的串称为空串(Empty String),它不包含任何字符。

空白串: 通常将仅由一个或多个空格组成的串称为空白串(Blank String)。

     注意:空串和空白串的不同。

2.串的基本运算(抽象运算)

串赋值: StrAssign(&S, chars)

串比较: StrCompare(S, T)

求串长: StrLength(S)

串联接: Concat(&T,S1,S2)

求子串:  SubString(&sub, S, pos, len)

串复制 : StrCopy(&T,S)

子串定位: Index(S,T,pos)

3. 串的表示(定长存储和堆存储)

 定长顺序存储

typedef struct{

        char ch[MaxStrlen];

        int length;

}SqString;

堆分配存储:

   typedef struct{

               char *ch;

               int  length;

  }Hstring;

4.串基本运算的代码实现

 1.定义串结构体,以堆分配的存储方式

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>#define Max 20
#define error 0
#define overflow -2
#define ok 1
#define true 1
#define false 0typedef struct
{char *ch;int length;
}HString;typedef int Status;

2.初始化串

//初始化串 
void InitString(HString &s)
{s.ch=NULL;s.length=0;
}

3.串赋值


//串赋值 
Status StrAssign(HString &T,char *str)
{int i,j;InitString(T);i=strlen(str);if(!i)return error;else{T.ch=(char*)malloc(i*sizeof(char));if(!T.ch)exit (overflow);for(j=0;j<i;j++)T.ch[j]=str[j];T.length=i;}
}

4. 判断串非空

//判断串非空 
Status StrEmpty(HString &T)
{if(T.length==0&&T.ch==NULL)return true;else return false;		
}

5.串赋值

//串复制,将S赋给T 
Status StrCopy(HString &T,HString S)
{int i;InitString(T);if(StrEmpty(S))return error;T.ch=(char*)malloc(S.length*sizeof(char));if(!T.ch)exit(overflow);for(i=0;i<S.length;i++)T.ch[i]=S.ch[i];T.length=S.length;return ok;		
}

6.串比较

//串比较 
Status StrCmp(HString S,HString T)
{int i;for(i=0;i<S.length&&i<T.length;i++){if(S.ch[i]!=T.ch[i])return S.ch[i]-T.ch[i];}return 0;
}

7.求串长

Status StrLength(HString S)
{if(StrEmpty(S))return error;elsereturn S.length; 
}

8.串清空

//串清空,恢复到初始化时刻 
Status ClearString(HString &s)
{if(s.ch){free(s.ch);s.ch=NULL;}s.length=0;return ok;
}

9.串拼接

//串拼接,将S1,S2拼接后用T返回 
Status Concat(HString &T,HString S1,HString S2)
{int i;InitString(T);T.length=S1.length+S2.length;T.ch=(char*)malloc(T.length*sizeof(char));if(!T.ch)exit(overflow);for(i=0;i<S1.length;i++)T.ch[i]=S1.ch[i];for(i=0;i<S2.length;i++)T.ch[S1.length+i]=S2.ch[i];return ok;
}

10.求子串

//求子串,将S从第pos位起len个长度的子串用Sub返回 
Status SubString(HString &Sub,HString S,int pos,int len)
{int i;InitString(Sub);if(StrEmpty(S))return error;if(pos<1||pos>S.length||len<0||pos+len-1>S.length)return error;if(len){Sub.ch=(char*)malloc(len*sizeof(char));if(!Sub.ch)exit(overflow);for(i=0;i<len;i++)Sub.ch[i]=S.ch[pos+i-1];Sub.length=len;		}return ok;
}

11.串索引

//串索引,返回T在S中第pos个字符后第一次出现的位置 
Status Index(HString S,HString T,int pos)
{int s,t,i;HString Sub;InitString(Sub);if(pos>0){s=S.length;t=T.length;i=pos;while(i+t-1<=s){SubString(Sub,S,i,t);if(StrCmp(Sub,T))i++;elsereturn i;}}return 0;
}

12.串插入

//串插入 
Status StrInsert(HString &S,int pos,HString T)
{int i;if(pos<1||pos>S.length+1)return error;if(StrEmpty(T))return error;else{S.ch=(char*)realloc(S.ch,(S.length+T.length)*sizeof(char));if(!S.ch)exit (overflow);for(i=S.length-1;i>=pos-1;i--)S.ch[i+T.length]=S.ch[i];for(i=0;i<T.length;i++)S.ch[pos+i-1]=T.ch[i];S.length+=T.length;			}return ok;
}

13.串删除

//串删除 
Status StrDelete(HString &S,int pos,int len)
{int i;if(StrEmpty(S))return error;if(pos<1||pos+len-1>S.length||len<0)return error;for(i=pos-1;i+len<=S.length;i++)S.ch[i]=S.ch[i+len];S.length-=len;S.ch=(char*)realloc(S.ch,S.length*sizeof(char));return ok;
}

 14.串替换

//串替换 ,用v替换主串中所有与T相等的不重叠子串 
Status Replace(HString &S,HString T,HString V)
{int i;if(StrEmpty(T))return error;i=Index(S,T,1);while(i!=0){StrDelete(S,i,StrLength(T));StrInsert(S,i,V);i+=StrLength(V);i=Index(S,T,i); }return ok;
}

15.输出串

//输出串S 
void StrPrint(HString S)
{int i;if(StrEmpty(S))printf("S为空串,不可输出!");for(i=0;i<S.length;i++)printf("%c",S.ch[i]); printf("\n");
}

16.主函数测试,只调用了主要的几个函数,其余函数也可以自行验证

//主函数
int main()
{HString S,T,V;InitString(T);InitString(S);InitString(V);printf("***************************\n");printf("从键盘输入两串字符(分别为字符串1,2):\n"); char str1[Max]; gets(str1);char str2[Max]; gets(str2);printf("***************************\n");printf("实现两串字符的连接: ");StrAssign(S,str1);StrAssign(T,str2);Concat( V,S, T);StrPrint(V); printf("\n********************************\n");printf("\n对字符串1进行删除操作:\n");int pos,len;printf("输入你想删除的位置和长度:");scanf("%d%d",&pos,&len);StrDelete(S, pos, len);StrPrint(S);printf("********************************\n");printf("\n将串2插入到修改后的串1的某个位置:\n");printf("输入你想插入的位置:");scanf("%d",&pos);StrInsert(S, pos, T);StrPrint(S);printf("********************************\n");printf("\n求串3的子串:\n");printf("输入你想取的子串的起始位置和长度:");scanf("%d%d",&pos,&len); HString Sub;SubString(Sub,V, pos, len);StrPrint(Sub);printf("********************************\n");printf("\n清空并释放串指针\n");ClearString(S);ClearString(V);ClearString(T);printf("\n程序结束!\n");return 0;} 

5.程序截图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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

相关文章

串(字符串)

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

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

【数据结构】串&#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;但电脑上总要备一款以防不…