資源描述:
《數(shù)據(jù)結(jié)構(gòu)c語言串的堆分配存儲源程序.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、#include#include#include#defineOK1#defineERROR0#defineOVERFLOW-2typedefintStatus;typedefstruct{char*ch;intlength;}HString;//初始化操作voidInitString(HString*T){T->length=0;T->ch=NULL;}//賦值操作StatusStrAssign(HString*T,char*chars){//生成一個其值等于串常量chars的串Tinti,j;//ch
2、ar*c;if(T->ch)free(T->ch);//釋放T原有空間//for(i=0,c=chars;*c;++i,++c);//求chars的長度i,*c表*c!=NULLi=strlen(chars);if(!i){T->ch=NULL;T->length=0;}else{T->ch=(char*)malloc(i*sizeof(char));if(!T->ch)exit(OVERFLOW);for(j=0;jch[j]=chars[j];T->length=i;}returnOK;}//StrAssign//串復制操作StatusS
3、trCopy(HString*T,HStringS){inti;if(T->ch)free(T->ch);T->ch=(char*)malloc(S.length*sizeof(char));if(!T->ch)exit(OVERFLOW);for(i=0;ich[i]=S.ch[i];T->length=S.length;returnOK;}//StrCopy//判空操作StatusStrEmpty(HStringS){if(S.length==0&&S.ch==NULL)returnOK;elsereturnERROR;}/
4、/StrEmpty//求長度操作intStrLength(HStringS){returnS.length;}//Strlength//串比較操作intStrCompare(HStringS,HStringT){inti;for(i=0;ich){free(S->ch);
5、S->ch=NULL;}S->length=0;returnOK;}//ClearString//串連接操作StatusConcat(HString*T,HStringS1,HStringS2){inti;if(T->ch)free(T->ch);//釋放舊空間T->ch=(char*)malloc((S1.length+S2.length)*sizeof(char));if(!T->ch)exit(OVERFLOW);for(i=0;ich[i]=S1.ch[i];}T->length=S1.length+S2.lengt
6、h;for(i=0;ich[S1.length+i]=S2.ch[i];}returnOK;}//Concat//求子串操作StatusSubString(HString*Sub,HStringS,intpos,intlen){inti;if(pos<1
7、
8、pos>S.length
9、
10、len<0
11、
12、len>S.length-pos+1)returnERROR;if(Sub->ch)free(Sub->ch);//釋放舊空間if(!len){//空子串Sub->ch=NULL;Sub->length=0;}else{//完整子
13、串Sub->ch=(char*)malloc(len*sizeof(char));if(!Sub->ch)exit(OVERFLOW);for(i=0;i<=len-1;i++)Sub->ch[i]=S.ch[pos-1+i];Sub->length=len;}returnOK;}//SubString//求子串位置操作intIndex(HStringS,HStringT,intpos){//T為非空串。若主串S中第pos個字符之后存在與T相等的子串,//則返回第一個這樣的子串在S中的位置,否則返回0inti,m,n;HStringSub;InitString(
14、&Sub);//一定要初