C语言数据结构之动态分配实现串
C语言数据结构之动态分配实现串
说明:堆分配存储实现串时,串并不是以'\0‘,而是用数据项intlength来表示的,所以和传统的c语言操作字符串有所不同。
头文件
#ifndefPILEHEAD_H_INCLUDED #definePILEHEAD_H_INCLUDED #include#include typedefstruct { char*ch; intlen; }HString; intStrAssign(HString*pstr,char*pch); intStrLength(HString*pstr); intStrCompaer(HString*pstr1,HString*pstr2); intStrClear(HString*pstr); intStrConcat(HString*pstr,HStringstr1,HStringstr2); intStrSub(HString*sub,HStringpstr,intpos,intlength); intStrPrint(HString*pstr); #endif//PILEHEAD_H_INCLUDED
函数实现
#include"pilehead.h" intStrAssign(HString*pstr,char*pch) { if(!pstr->len) { free(pstr->ch); } inti; for(i=0;pch[i]!='\0';i++) { ; } if(i==0) { pstr->ch=NULL; pstr->len=0; } else { pstr->ch=(char*)malloc(i*sizeof(char)); pstr->len=i; } i=0; while(ilen) { pstr->ch[i]=pch[i]; i++; } return0; } intStrPrint(HString*pstr) { inti=0; while(i len) { printf("%c",pstr->ch[i]); i++; } printf("\n"); return0; } intStrLength(HString*pstr) { returnpstr->len; } intStrCompaer(HString*pstr1,HString*pstr2) { inti=0; intret=0; while(i len&&i len) { ret=pstr1->ch[i]-pstr2->ch[i]; if(ret<0) { return-1; } elseif(ret>0) { return1; } else { i++; } } intdiff=pstr1->len-pstr2->len; if(diff<0) { return-1; } elseif(diff==0) { return0; } return1; } intStrClear(HString*pstr) { if(pstr->ch) { free(pstr->ch); pstr->ch=NULL; } pstr->len=0; return0; } intStrConcat(HString*pstr,HStringstr1,HStringstr2) { StrClear(pstr); StrAssign(pstr,str1.ch); intlen=str1.len; intlen2=0; while(len2 ch[len++]=str2.ch[len2++]; } pstr->len=str1.len+str2.len; return0; } intStrSub(HString*sub,HStringpstr,intpos,intlength) { if(pos<1||pos>pstr.len||length<1||length>pstr.len-pos+1) { printf("ERROR!\n"); exit(1); } StrClear(sub); sub->ch=(char*)malloc(length*sizeof(char)); sub->len=length; inti=0; while(i ch[i]=pstr.ch[pos-1+i]; i++; } return0; }
测试函数
#include"pilehead.h" intmain() { HStringstr; HStringstr1; HStringstr2; char*pch="abcd"; StrAssign(&str,pch); StrAssign(&str1,"abcd"); StrAssign(&str2,"fhasdifhos"); StrPrint(&str); StrPrint(&str1); /*StrClear(&str); StrPrint(&str); inti=StrCompaer(&str,&str1); printf("%d",i);*/ StrConcat(&str,str1,str2); StrPrint(&str); HStrings; StrSub(&s,str,4,5); StrPrint(&s); return0; }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。