顺序串的基本操作

Posted -slz-2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序串的基本操作相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#define MaxSize 255
typedef struct
{
	char ch[MaxSize];
	int length;
}SString;
void InitStr(SString &S)	
{
	S.ch[0]=‘¥‘;
	S.length=0;
}
void StrCreate(SString &S,char a[])		//1.赋值操作
{
	int i=0,j=1;
	while(a[i]!=‘‘)
	{
		S.ch[j++]=a[i++];
	}
	S.length=i;
}
void StrCopy(SString &S,SString T)	//2.复制操作
{
	for(int i=1;i<T.length;i++)
		S.ch[i]=T.ch[i];
	S.length=T.length;
}
bool StrEmpty(SString S)	//3.判空操作
{
	return S.length==0;
}
int StrLen(SString S)	//4.求串长
{
	return S.length;
}
void ClearStr(SString &S)	//5.清空操作
{
	S.length=0;
}
void Concat(SString &T,SString S1,SString S2)	//6.串链接
{
	int i;
	for(i=1;i<=S1.length;i++)	//将串S1复制到T
		T.ch[i]=S1.ch[i];
	for(i=1;i<=S2.length;i++)	//将S2复制到T尾部
		T.ch[S1.length+i]=S2.ch[i];
	T.length=S1.length+S2.length;
}
bool SubString(SString S,SString &Sub,int front,int len)	//7.求子串
{
	if(S.length<front+len-1)	//判断子串是否越界
		return false;
	for(int i=1;i<=len;i++)
		Sub.ch[i]=S.ch[front++];
	Sub.length=len;
	return true;
}
int CompareStr(SString S,SString T)	//8.比较操作
{
	int i=1;
	while(i<S.length && i<T.length && S.ch[i]==T.ch[i])
		i++;
	if(S.ch[i]!=T.ch[i])	
		return S.ch[i]-T.ch[i];	//S>T 返回值>0;S<T 返回值<0;S=T 返回值=0
	return S.length-T.length;	//扫描过的字符一致,长串大
}
int Index(SString S,SString T)	//9.定位操作
{
	int i=1,m=S.length,n=T.length;
	SString Sub;
	while(i<m-n+1)		//长度为T.length的子串个数
	{
		SubString(S,Sub,i,T.length);	//依次求子串
		if(CompareStr(Sub,T)==0)	//判断两串是否相等
			return i;	//返回位置i
		i++;
	}
	return 0;
}
void PrintStr(SString S)	//10.输出操作
{
	printf("the Strings are:");
	for(int i=1;i<=S.length;i++)
		printf("%c	",S.ch[i]);
	printf("
");
}
int main()
{
	SString S;
	InitStr(S);
	char a[]="abcdefg";
	printf("The Strings is %s
",StrEmpty(S)?"空":"非空");
	StrCreate(S,a);
	printf("The Strings is %s
",StrEmpty(S)?"空":"非空");
	PrintStr(S);
	printf("The S‘s length is %d
",S.length);
	SString Sub;
	SubString(S,Sub,2,3);
	PrintStr(Sub);
	SString T;
	Concat(T,S,Sub);
	PrintStr(T);
	printf("The T‘s length is %d
",T.length);
	int i=CompareStr(S,T);
	if(i==1)
		printf("The max is %c
",‘S‘);
	else if(i==0)
		printf("The max is S and T
");
	else 
		printf("The max is %c
",‘T‘);
	printf("The Sub is Num %d in S
",Index(S,Sub));
	char b[]="acdbg";
	SString R;
	StrCreate(R,b);
	printf("The Sub is Num %d in S
",Index(S,R));
	ClearStr(T);
	printf("The Strings is %s
",StrEmpty(T)?"空":"非空");
	return 0;
}

  

以上是关于顺序串的基本操作的主要内容,如果未能解决你的问题,请参考以下文章

串的动态顺序存储代码

顺序串的基本操作

顺序串的实现及应用

数据结构 顺序串笔记

数据结构(十五)串的顺序存储结构(顺序串)

数据结构学习笔记——顺序存储结构实现串