串(纯C语言实现)

1. 串的存储结构

1.1 串的顺序存储

从下标为1的数组分量开始存储

当0号单元存放串的当前长度时,可以定义:(后续基本操作都使用此定义

typedef char SString[MAXSIZE+1];   //后续这样定义串SString S,T; 这样取值S[0],T[1];

但0号单位闲置不用时,可以定义:

typedef struct{
   
    char ch[MAXSIZE+1];
    int length;             //记录串的当前长度
}SString;

还有堆(Heap)式顺序存储结构

typedef struct{
   
    char *ch;
    int length;
}HString;

1.2 串的链式存储

块链结构:

#define CHUNKSIZE 80           //定义块的大小
typedef struct Chunk{
   
    char ch[CHUNKSIZE];
    struct Chunk *next;
}Chunk;
typedef struct{
   
    Chunk *head,*tail;         //头指针和尾指针,可以只要其中一个
    int length;
}LString;

2. 串的基本操作

2.1 分配StrAssign(T,*chars)

生成一个其值等于chars的串T(chars是字符串常量),如StrAssign(s1,"abcd")

Status StrAssign(SString T,char *chars)
{
    
	int i;
	if(strlen(chars)>MAXSIZE)
		return ERROR;
	else
	{
   
		T[0]=strlen(chars);
		for(i=1;i<=T[0];i++)
			T[i]=*(chars+i-1);
		return OK;
	}
}

2.2 复制StrCopy(T,S)

由串S复制得串T

Status StrCopy(SString T,SString S)
{
    
	int i;
	for(i=0;i<=S[0];i++)
		T[i]=S[i];
	return OK;
}

2.3 判断是否为空StrEmpty(S)

Status StrEmpty(SString S)
{
    
	if(S[0]==0)
		return TRUE;
	else
		return FALSE;
}

2.4 比较大小StrCompare(S,T)

返回长度差。若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0

int StrCompare(SString S,SString T)
{
    
	int i;
	for(i=1;i<=S[0]&&i<=T[0];++i)
		if(S[i]!=T[i])
			return S[i]-T[i];
	return S[0]-T[0];
}

2.5 求串长StrLength(S)

int StrLength(SString S)
{
    
	return S[0];
}

2.6 清空ClearString(S)

Status ClearString(SString S)
{
    
	S[0]=0;             //令串长为零 
	return OK;
}

2.7 字符串连接Concat(T,S1,S2)

用T返回S1和S2联接而成的新串。若未截断S2,则返回TRUE,否则FALSE

Status Concat(SString T,SString S1,SString S2)
{
   
	int i;
	if(S1[0]+S2[0]<=MAXSIZE)
	{
    
		for(i=1;i<=S1[0];i++)
			T[i]=S1[i];
		for(i=1;i<=S2[0];i++)
			T[S1[0]+i]=S2[i];
		T[0]=S1[0]+S2[0];
		return TRUE;
	}
	else                                //截断S2
	{
    
		for(i=1;i<=S1[0];i++)
			T[i]=S1[i];
		for(i=1;i<=MAXSIZE-S1
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值