学习笔记------数据结构(C语言版)串的定长顺序存储表示

//SequenceString.cpp

#include"predefined.h"
#include"SequenceString.h"


Status StrAssign(SString T,char *chars)
//生成一个其值等于chars的串T
{
	int i,len;
	len=strlen(chars);
	if(len>MAXSTRLEN)
		return ERROR;
	T[0]=len;
	for(i=1;i<=len;i++)
	{
		T[i]=chars[i-1];
	}
	return OK;
}

void StrCopy(SString T,SString S)
//由串S复制的串T
{
	int i;
	for(i=0;i<=S[0];i++)
	{
		T[i]=S[i];
	}
}

Status StrEmpty(SString S)
//若串S为空串,返回TRUE;否则返回FALSE
{
	if(S[0])
		return FALSE;
	else
		return TRUE;
}

Status StrCompare(SString S,SString T)
//若S>T,则返回值>0;若S=T,则返回值=0;若SS[0]||len<0||len>S[0]-pos+1)
		return ERROR;
	Sub[0]=len;
	int i;
	for(i=1;i<=len;i++)
	{
		Sub[i]=S[pos++];
	}
	return OK;
}

Status Index(SString S,SString T,int pos)
//算法4.1:T为非空串。若主串S中第pos个字符之后存在与T相等的子串,
//则返回第一个这样的子串在S中的位置,否则返回0
{
	int m,n,i;
	SString Sub;
	n=StrLength(S);
	m=StrLength(T);
	i=pos;
	if(pos>0)
	{
		while(i<=n-m+1)
		{
			SubString(Sub,S,i,m);
			if(StrCompare(Sub,T))
				i++;
			else
				return i;
		}
	}
	return ERROR;
}

Status Replace(SString S,SString T,SString V)
//用V替换主串S中出现的所有与T相等的不重叠的子串
{
	int n;
	n=Index(S,T,1);
	while(S[0]-T[0]+V[0]S[0]+1||S[0]+T[0]>MAXSTRLEN)
		return ERROR;
	for(i=1;i<=S[0]-pos+1;i++)
		S[S[0]+T[0]-i+1]=S[S[0]-i+1];
	for(i=pos,j=1;j<=T[0];i++,j++)
		S[i]=T[j];
	S[0]=S[0]+T[0];
	return OK;
}

Status StrDelete(SString S,int pos,int len)
//从串S中删除第pos个字符起长度为len的子串
{
	int i;
	if(pos<1||pos+len-1>S[0]||len<0)
		return ERROR;
	for(i=0;i

//SequenceString.h

#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];
void StrAssign(SString *T,char *chars);

Status StrAssign(SString T,char *chars);
void StrCopy(SString T,SString S);
Status StrEmpty(SString S);
Status StrCompare(SString S,SString T);
Status StrLength(SString S);
void ClearString(SString S);
Status Concat(SString T,SString S1,SString S2);
Status SubString(SString Sub,SString S,int pos,int len);
Status Index(SString S,SString T,int pos);
Status Replace(SString S,SString T,SString V);
Status	StrInsert(SString S,int pos,SString T);
Status StrDelete(SString S,int pos,int len);
void StrPrint(SString S);

//main.cpp

#include"predefined.h"
#include"SequenceString.h"
int main()
{
	char *chars="abcdefg";
	char *t="***";
	char *v="^^^^";
	SString S,Tmp,T,V,Sub;
	int i;
	printf("Function 1\n★函数Status StrAssign(SString T,char *chars)测试...\n");
	printf("▲为顺序串Tmp赋值...\n\n");
	StrAssign(Tmp,chars);
	printf("Function 2\n★函数Status StrEmpty(SString S)测试...\n");
	StrEmpty(Tmp)?printf("▲Tmp空串!!!\n\n"):printf("▲Tmp非空!!!\n\n");
	printf("Function 3\n★函数Status StrLength(SString S)测试...\n");
	i=StrLength(Tmp);
	printf("▲Tmp长度为%d\n\n",i);
	printf("Function 4\n★函数void StrPrint(SString S)测试...\n");
	printf("▲串Tmp=\"");
	StrPrint(Tmp);
	printf("\"\n\n");
	printf("Function 5\n★函数void StrCopy(SString T,SString S)测试...\n");
	StrCopy(S,Tmp);
	printf("▲串S=\"");
	StrPrint(S);
	printf("\"\n\n");
	printf("Function 6\n★函数Status StrCompare(SString S,SString T)测试...\n");
	i=StrCompare(Tmp,S);
	i==0?printf("Tmp=S\n\n"):(i<0?printf("TmpS\n\n"));
	printf("Function 7\n★函数Status	StrInsert(SString S,int pos,SString T)测试...\n");
	printf("▲将\"***\"赋给T...\n");
	StrAssign(T,t);
	printf("▲在S的第5个字符前插入T...\n");
	StrInsert(S,5,T);
	printf("▲串S=\"");
	StrPrint(S);
	printf("\"\n\n");
	printf("Function 8\n★函数Status Index(SString S,SString T,int pos)测试...\n");
	printf("▲获取\"***\"在S中从第1个字符算起的第一次出现的位置...\n");
	i=Index(S,T,1);
	printf("▲\"***\"在S中从第1个字符算起的第一次出现的位置为:%d\n\n",i);
	printf("Function 9\n★函数Status SubString(SString Sub,SString S,int pos,int len)测试...\n");
	printf("▲用Sub返回S中第5个字符起的3个字符...\n");
	SubString(Sub,S,5,3);
	printf("▲串Sub=\"");
	StrPrint(Sub);
	printf("\"\n\n");
	printf("Function 10\n★函数Status Replace(SString S,SString T,SString V)测试...\n");
	printf("▲将\"^^^^\"赋给V...\n");
	StrAssign(V,v);
	printf("▲用\"^^^^\"替换S中的\"***\"...\n");
	Replace(S,T,V);
	printf("▲串S=\"");
	StrPrint(S);
	printf("\"\n\n");
	printf("Function 11\n★函数Status StrDelete(SString S,int pos,int len)测试...\n");
	printf("▲删除S中第5个字符起的4个字符...\n");
	StrDelete(S,5,4);
	printf("▲串S=\"");
	StrPrint(S);
	printf("\"\n\n");
	printf("Function 12\n★函数void ClearString(SString S)测试...\n");
	printf("▲清空S前:");
	StrEmpty(S)?printf("▲S空串!!!\n"):printf("▲S非空!!!\n");
	ClearString(S);
	printf("▲清空S后:");
	StrEmpty(S)?printf("▲S空串!!!\n\n"):printf("▲S非空!!!\n\n");
	printf("Function 13\n★函数Status Concat(SString T,SString S1,SString S2)测试...\n");
	printf("▲链接T和V形成Tmp...\n");
	Concat(Tmp,T,V);
	printf("▲串Tmp=\"");
	StrPrint(Tmp);
	printf("\"\n\n");
}


你可能感兴趣的:(学习笔记---数据结构)