<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
與定長順序穿的儲存結構類似,都是用一組地址連續的儲存單元儲存串的字元序列,不同的是堆串的儲存空間是動態分配的,只要儲存空間分配成功,就不會擔心串在插入或者連線時候出現截斷的情況。
malloc(),free(),realloc() 這三個函數用來對動態儲存進行操作。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define false 0 #define true 1 typedef 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]!=' '){ //確定串長 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<pos;i++){ //將s串pos之前(不含pos)的字元賦給temp temp[i]=s->ch[i]; } for(i=pos;i<pos+t.len;i++){ //將t串的元素賦給s temp[i]=t.ch[i-pos+1]; } for(i=0;i<=s->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<s->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<len;i++){ printf("%c",s->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語言的堆串操作詳解的文章就介紹到這了,更多相關C語言堆串內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45