//HeapString.cpp
#include"predefined.h"
#include"HeapString.h"
void InitString(HString *S)
//初始化S为空串
{
(*S).ch=NULL;
(*S).length=0;
}
Status StrAssign(HString *T,char *chars)
//生成一个其值等于串常量chars的串T
{
int i;
if(!(*T).ch)
free((*T).ch);
i=strlen(chars);
if(!i)
{
(*T).ch=NULL;
(*T).length=0;
}
else
{
(*T).ch=(char *)malloc(i*sizeof(char));
if(!(*T).ch)
exit(OVERFLOW);
(*T).length=i;
for(i=0;i<(*T).length;i++)
{
(*T).ch[i]=chars[i];
}
}
return OK;
}
Status StrCopy(HString *T,HString S)
//由串S复制得T
{
int i;
if((*T).ch)
free((*T).ch);
(*T).length=S.length;
if(!((*T).ch=(char *)malloc((*T).length*sizeof(char))))
exit(OVERFLOW);
for(i=0;i<(*T).length;i++)
(*T).ch[i]=S.ch[i];
return OK;
}
Status StrEmpty(HString S)
//若S为空串,则返回TRUE,否则返回FALSE
{
if(!S.length)
return TRUE;
else
return FALSE;
}
int StrLength(HString S)
//返回S的元素个数,称为串的长度
{
return S.length;
}
int StrCompare(HString S,HString T)
//若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0
{
int i;
for(i=0;i<S.length&&i<T.length;i++)
{
if(S.ch[i]!=T.ch[i])
return S.ch[i]-T.ch[i];
}
return S.length-T.length;
}
Status ClearString(HString *S)
//将S清空
{
if((*S).ch)
{
free((*S).ch);
(*S).ch=NULL;
}
(*S).length=0;
return OK;
}
Status Concat(HString *T,HString S1,HString S2)
//用T返回由S1和S2联接而成的新串
{
int i;
if(!(*T).ch)
free((*T).ch);
(*T).length=S1.length+S2.length;
(*T).ch=(char*)malloc((*T).length*sizeof(char));
if(!(*T).ch)
exit(OVERFLOW);
for(i=0;i<(*T).length;i++)
{
if(