C语言的堆串实例操作分析
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,今天小编给大家分享一下C语言的堆串实例操作分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
千家信息网最后更新 2025年11月06日C语言的堆串实例操作分析
今天小编给大家分享一下C语言的堆串实例操作分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、堆串概念
与定长顺序穿的存储结构类似,都是用一组地址连续的存储单元存储串的字符序列,不同的是堆串的存储空间是动态分配的,只要存储空间分配成功,就不会担心串在插入或者连接时候出现截断的情况。
malloc(),free(),realloc() 这三个函数用来对动态存储进行操作。
二、基本操作
#include#include #include #define false 0#define true 1typedef struct { char *ch; //字符数组,若是非空则指向起始地址,若为空则NULL int len; //长度 }HString;//初始化int HInit(HString *s){ s->ch=NULL; s->len=0;} //串赋值int HStrAssign(HString *s,const char *chars){ int i=0; while(chars[i]!='\0'){ //确定串长 i++; } s->len=i; if(s->ch!=NULL){ free(s); }else{ s->ch=(char *)malloc((s->len+1)*sizeof(char));//0号单元不用 if(s==NULL){ printf("空间申请失败!"); return false; } for( i=1;i<=s->len;i++){ //依次赋值 s->ch[i]=chars[i-1]; } }}//串遍历int HSbianli(HString *s){ if(s->len==0){ printf("串空!"); return false; }else{ int i; for(i=1;i<=s->len;i++){ printf("%c",s->ch[i]); } return true; }} //串插入int HStrInsert(HString *s,int pos,const HString t){ if(pos<1||pos>s->len){ printf("位置不合法!"); return false; } char *temp; temp=(char *)malloc((s->len+t.len+1) *sizeof(char)); int i; for(i=1;i ch[i]; } for(i=pos;i len-pos;i++){ temp[pos+t.len+i]=s->ch[i+pos]; } free(s->ch); s->ch=temp; s->len=s->len+t.len; return true; } //串删除int HStrDelete(HString *s,int pos,int len){ if(s->len==0){ printf("串空!"); return false; }else if(len>=s->len){ printf("非法位置!"); return false; }else{ for(int i=pos;i len-pos;i++){ //跨度为len的依次赋值 s->ch[i]=s->ch[i+len]; } s->len=s->len-len; return true; }} //串连接 int HStrCon(HString *s,const HString t){ s->ch=(char *)realloc(s->ch,(s->len+t.len+1) *sizeof(char)); if(s==NULL){ printf("空间申请失败!"); return false; } if(s->len==0){ printf("串空!"); return false; }else{ for(int i=1;i<=t.len;i++){ s->ch[i+s->len]=t.ch[i]; } s->len=s->len+t.len; return true; } } //求字串 int HStrchild(HString *s,int pos,int len){ if(s->len==0){ printf("串空!"); return false; }else{ for(int i=0;i ch[i+pos]); } return true; } } int main(){ HString s; HString s1; HInit(&s); HInit(&s1); char a[]={"aaaaa"}; char b[]={"bbb"}; HStrAssign(&s,a); HStrAssign(&s1,b); printf("-----将aaaaa赋值给s,bbb赋值给s1-----\n"); printf("此时串s为:"); HSbianli(&s); printf("\n此时串s1为:"); HSbianli(&s1); printf("\n将s1连接到s为:"); HStrCon(&s,s1); HSbianli(&s); printf("\n将串s1插入到s串的第二个位置:"); HStrInsert(&s,2,s1); HSbianli(&s); printf("\n再将插入的s1串删除:"); HStrDelete(&s,2,3); HSbianli(&s); printf("\ns1在第二个元素长度为2的子串为:"); HStrchild(&s,2,2);}
三、运行:
代码可运行。
以上就是"C语言的堆串实例操作分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
存储
知识
空间
篇文章
实例
语言
分析
不同
位置
元素
内容
动态
单元
地址
字符
空间申请
长度
分配
运行
很大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
05附加新数据库
php有建好的数据库
不能还原微赞数据库
网吧服务器硬盘是多大
服务器容灾 keep
华硕飞行堡做软件开发
数据库rac模式
樊城区网络安全宣传
SHOPEX下载软件开发
软件开发常用架构
sql数据库事务日志设置
计算机网络技术专业买电脑
数据库可以附加网络硬盘吗
数据库中格式控件属性
计算机数据库服务
淮北软件开发
数据库中导出数据是什么意思
网络安全抄报内容怎么写
可以作为副业的网络技术
法国外交档案数据库
鬼话钟馗数据库
吴兴时讯网络安全
网络安全宣传签字主持词
口腔癌基因数据库
软件开发网络工程哪个比较好
重庆程序软件开发定制费用
数据库安全综述毕业论文
电力网络安全宣传的方案
三明物流软件开发
悬空城服务器