C语言的堆串实例操作分析
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,今天小编给大家分享一下C语言的堆串实例操作分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
千家信息网最后更新 2025年01月16日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安全错误
数据库的锁怎样保障安全
包含NAT的网络技术
数据库审计方式
支付宝授权菜鸟网络安全吗
湖南软件开发者排名
sqlyog回滚数据库
专业技术人员网络安全试卷8
网络安全沙箱价格
烟台派特网络技术有限责任公司
关于网络安全工作的情况汇报
软件开发适合用苹果电脑吗
全球的网络安全市场规模
网络安全公务员
计算机网络技术技师专业
如何看服务器性能
电视显示互联网与服务器断开
网络安全员有什么风险
移动服务器哪里有卖
关于网络安全提出的问题和答案
广东亿润网络技术有限公司彭建才
硬盘做服务器
章丘红色文化馆软件开发公司
小程序数据库城市
安卓软件开发入门书籍推荐
随着科技发达互联网
上位机怎样开发软件开发
速排互联网科技
网络安全大赛的策划书
软件开发工程师熬夜吗
广州鲁棒通网络技术
网络安全护航在线新经济