数据结构 —— 串的定义、存储结构和基本操作

串的定义

  • 串是由零个或多个字符组成的有限序列。串中字符的个数称为串的长度,含有零个元素的串叫空串
  • 串中任意连续的字符组成的子序列称为该串的字串,包含字串的串称为主串,某个字符在串中的序号称为这个字符的位置
  • 串是限定了元素为字符的线性表

串的存储结构

定长顺序存储:

// 定长顺序存储
typedef struct 
{
	char str[maxSize+1];	//串的最大长度为maxSize,多出的一个空间用来存放'\0'作为结束标志
	int length;
}Str;

变长分配存储:

// 变长分配存储
typedef struct 
{
	char *ch;	//指向动态分配存储区首地址的字符指针
	int length;
}Str;

串的基本操作

赋值操作

// 赋值操作:将一个常量字符串赋值给str,赋值操作成功返回1,否则返回0
int strCopy(Str &str,char *ch)
{
	if(str.ch)
		free(str.ch);	// 释放str的空间,用于后面的赋值(覆盖)
	int len=0;
	char *c=ch;	// 创建临时变量c用于遍历ch
	while(*c)	// 当值为空时,说明读取结束
	{
		c++;
		len++;
	}
	if(len==0)
	{
		str.ch=NULL;
		str.length=0;
		return 1;
	}
	else{
		str.ch=(char*)malloc(sizeof(char)*(len+1));	// 多分配一个空间存放'\0'
		if(str.ch==NULL)
			return 0;
		else{
			c=ch;
			int i=0;
			for(i=0;i<=len;i++)
			{
				str.ch[i]=*c;
				c++;
			}
			str.length=len;
			return 1;
		}
	}
}

获取串的长度

// 获取串的长度
int strLength(Str str)
{
	return str.length;
}

串比较操作

// 串比较操作
int strCompare(Str s1,Str s2)
{
	int i=0;
	for(i=0;i<s1.length&&i<s2.length;i++)
	{
		if(s1.ch[i]!=s2.ch[i])	// 如果不相等则返回结果,否则继续循环比较
			return s1.ch[i]-s2.ch[i];
	}
	return s1.length-s2.length;	// 如果循环结束,则对两个字符串进行长度的比较,得到结果
}

串连接操作

// 	串连接操作
Str strConcat(Str s1,Str s2)
{
	Str str;
	str.ch=(char *)malloc(sizeof(char)*(s1.length+s2.length+1));
	str.length=s1.length+s2.length;
	int i=0;
	for(i=0;i<s1.length;i++)
	{
		str.ch[i]=s1.ch[i];
	}
	int j=0;
	for(j=0;j<=s2.length;j++)	// 连同s2.ch最后一个'\0'一起复制
	{
		str.ch[j]=s1.ch[j];
	}
	return str;
}

串清空操作

// 串清空操作
int strClean(Str &s1)
{
	if(s1.ch)
	{
		free(s1.ch);
		str.ch=NULL;
	}
	str.length=0;
	return 1;
}

求子串操作

// 求子串操作:求s1从pos位置开始,长度为len的子串
Str subString(Str s1,int pos,int len)
{
	if(pos<0||len<0||pos>=s1.length||len>str.length-pos)	// 先做异常情况处理
		return 0;
	Str str;
	if(len==0)
	{
		str.ch=NULL;
		str.length=0
		return 1;
	}
	else
	{
		str.ch=(char*)malloc(sizeof(char)*(len+1));
		int i=0;
		for(i=0;i<len;i++)
		{
			str.ch[i]=s1.ch[i+pos];
		}
		str.ch[i]='\0';
		str.length=0;
		return 1;
	}
}

你可能感兴趣的:(数据结构)