C语言的堆串实例操作分析
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,今天小编给大家分享一下C语言的堆串实例操作分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
数据库监控厂家
sort函数达梦数据库用法
怀旧服部落最强的服务器
下面哪个不是数据库技术的特点
网络安全工作的四个坚持讨论
peap网络安全审计
山东省网络安全备案服务平台
软件开发也要出差吗
软件开发哪里的好
xml配置数据库密码
服务器外部安全模式
行政区划空间数据库
软件开发各岗位英文
想从c 转到大数据库
网络安全沈鑫剡课后习题答案
天龙八部 服务器ip
山东专业网络技术资费
wps图表怎么填数据库
软件开发 工程化管理办法
云服务器免费试用华为云
西村垃圾数据库
西瓜网络安全股票
网络安全主题班会PPT一年级
西安注册软件开发公司
ftp服务器 主动模式
天猫crm数据库
服务器硬盘推荐
服务器i灯亮黄灯
科技知识竞赛互联网
中国工商银行软件开发