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(ilen)
{
printf("%c",pstr->ch[i]);
i++;
}
printf("\n");
return0;
}
intStrLength(HString*pstr)
{
returnpstr->len;
}
intStrCompaer(HString*pstr1,HString*pstr2)
{
inti=0;
intret=0;
while(ilen&&ilen)
{
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(len2ch[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(ich[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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。