串的堆式存储结构(二)

2014-11-24 09:28:05 · 作者: · 浏览: 5
s->len=index;
else
{
int i;
for(i=index;ilen;i++)
{
*(s->ch+i)=*(s->ch+i+x);
}
s->len-=x;
}
*(s->ch+s->len)='\0';
return OK;
}
//串比较
datatype HScomp(const HString* s1,const HString* s2)
{
int i=0;
for(i=0;ilen && ilen;i++)
{
if(*(s1->ch+i)!=*(s2->ch+i))
return *(s1->ch+i)-*(s2->ch+i);
}
return 0;//equal
}
/*串的提取
* 在串s中的index开始长度为length的子串提取到temp串中
* */
datatype HSsub(HString* temp,const HString* s,int index,int length)
{
if(index<0 || index>s->len) return ERROR;
if(length > s->len) length=s->len-index;
temp->len=length;
temp->ch=(char*)malloc(length*sizeof(char));
if(!temp->ch) return OVERFLOW;
int i;
for(i=0;i {
*(temp->ch+i)=*(s->ch+index+i);
}
*(temp->ch+temp->len)='\0';
return OK;
}
//串的替换,把串s的从index开始长度为length的子串,用串t替换掉
datatype HSReplace(HString* s,int index,int length,const HString*t)
{
if(index<0 || index>s->len )
return ERROR;
//如果length大于串s的长度就替换掉从index后的所有字符
if(length>s->len)
length=s->len;
int i;
for(i=0;i {
*(s->ch+i+index)=*(t->ch+i);
}
*(s->ch+s->len)='\0';
return OK;
}
int main(int argc ,char** argv)
{
// bulid string
HString S;
InitHString(&S);
assigment_string(&S,"hello world!");
PrintString(&S);
printf("length=%d\n",GetLength(&S));

#if 0
//localion
int local=HSLocal(&S,'w');
printf("local=%d\n",local);
free(S.ch);
#endif

#if 0
// insert
HString S1;
InitHString(&S1);
assigment_string(&S1,"****");
HSInsert(&S,&S1,2);
PrintString(&S);
printf("length=%d\n",GetLength(&S));
free(S1.ch);
#endif
#if 0
// copy
HString S2;
InitHString(&S2);
assigment_string(&S2,"beijing");
HSCopy(&S,&S2);
PrintString(&S);
printf("length=%d\n",GetLength(&S));
free(S.ch);
free(S2.ch);
#endif
#if 0
//cat
HString S3;
InitHString(&S3);
assigment_string(&S3,"////");
HSCat(&S,&S3);
PrintString(&S);
printf("length=%d\n",GetLength(&S));
free(S3.ch);
free(S.ch);
#endif

#if 0
// delete
HSdel(&S,2,5);
PrintString(&S);
printf("length=%d\n",GetLength(&S));
free(S.ch);
#endif

#if 0
// complar
HString S4;
InitHString(&S4);
assigment_string(&S4,"hello world!");
datatype ret=HScomp(&S,&S4);
if(ret>0)
printf("S>S4\n");
else if(ret<0)
printf("S else
printf("S=S4\n");
free(S4.ch);
free(S.ch);
#endif

#if 0
// sub
HString S5;
HSsub(&S5,&S,2,5);
PrintString(&S5);
printf("length=%d\n",GetLength(&S5));
free(S.ch);
free(S5.ch);
#endif

#if 1
// replace
HString S6;
InitHString(&S6);
assigment_string(&S6,"************************************");
HSReplace(&S,2,50,&S6);
PrintString(&S);
printf("length=%d\n",GetLength(&S));
free(S6.ch);
free(S.ch);

#endif
// free(S.ch);
return 0;
}