C语言数据结构 串的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验九串的基本操作

#include

#include

#include

typedef char Status;

int strlen(char *p)

{

int i=0;

while(*p++)i++;

return i;

}

typedef struct

{

char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度

}HString;

// 初始化(产生空串)字符串T

void InitString(HString *T)

{

(*T).length=0;

(*T).ch=NULL;

}

// 生成一个其值等于串常量chars的串T

Status StrAssign(HString *T, char *chars)

{

int i,j;

if((*T).ch)

free((*T).ch); // 释放T原有空间

i = strlen(chars); // 求chars 的长度i

if(!i)

{

// chars的长度为0

(*T).ch = NULL;

(*T).length = 0;

}

else

{

// chars的长度不为0

(*T).ch = (char*)malloc(i*sizeof(char)); // 分配串空间

if(!(*T).ch) // 分配串空间失败

exit(0);

for(j = 0; j < i; j++) // 拷贝串

(*T).ch[j] = chars[j];

(*T).length = i;

}

return 1;

}

// 由串S复制得串T

int StrCopy(HString *T,HString S) {

int i;

if((*T).ch)

free((*T).ch); // 释放T原有空间

(*T).ch=(char*)malloc(S.lengt h*sizeof(char)); // 分配串空间if(!(*T).ch) // 分配串空间失败

exit(0);

for(i=0;i

(*T).ch[i]=S.ch[i];

(*T).length=S.length;

return 1;

}

// 若S为空串,则返回1,否则返回0 int StrEmpty(HString S)

{

if(S.length == 0 && S.ch == NULL)

return 1;

else

return 0;

}

// 若S>T,则返回值>0;若S=T,则返回值=0;若S

int StrCompare(HString S,HString T)

{

int i;

for(i=0;i

if(S.ch[i] != T.ch[i])

return

S.ch[i]-T.ch[i];

return S.length-T.length;

}

// 返回S的元素个数,称为串的长度int StrLength(HString S)

{

return S.length;

}

// 将S清为空串

int ClearString(HString *S)

{

if((*S).ch)

{

free((*S).ch);

(*S).ch=NULL;

}

(*S).length=0;

return 1;

}

// 用T返回由S1和S2联接而成的新串

int Concat(HString *T,HString S1,HString S2)

{

int i;

if((*T).ch)

free((*T).ch); // 释放旧空间

(*T).length=S1.length+S2.leng th;

(*T).ch=(char

*)malloc((*T).length*sizeof(char )); //分配新串的长度

if(!(*T).ch)

exit(0);

for(i=0;i

(*T).ch[i]=S1.ch[i];

for(i=0;i

(*T).ch[S1.length+i]=S2.ch[i] ;

return 1;

}

// 用Sub返回串S的第pos个字符起长度为len的子串。

int SubString(HString *Sub, HString S,int pos,int len)

{

int i;

if(pos<1||pos>S.length||len<0 ||len>S.length-pos+1)

return 0;

if((*Sub).ch)

free((*Sub).ch); // 释放旧空间

if(!len) // 空子串

{

(*Sub).ch=NULL;

(*Sub).length=0;

}

else

{ // 完整子串

(*Sub).ch=(char*)malloc(len*s izeof(char));

if(!(*Sub).ch)

exit(0);

for(i=0;i<=len-1;i++)

(*Sub).ch[i]=S.ch[pos-1+i];

(*Sub).length=len;

}

return 1;

}

相关文档
最新文档