码迷,mamicode.com
首页 > 其他好文 > 详细

顺序串

时间:2019-08-14 23:50:28      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:ring   指针   sqs   false   比较   顺序   传递   qstring   相等   

顺序串参数采用直接传递顺序串的方法,不同于顺序表指针。

typedef struct {
	char data[MAXSIZE];
	int length;
}SqString;

  生成串

void StrAssign(SqString& s, char cstr[])
{
	int i;
	for (i = 0; cstr[i] != ‘\0‘; i++)
	{
		s.data[i] = cstr[i];
	}
	s.length = i;

  销毁串(存储空间由操作系统管理)

void DestroyStr(SqString& s)
{ }

串的复制

void StrCopy(SqString& s, SqString t)
{
	for (int i = 0; i < t.length; i++)
	{
		s.data[i] = t.data[i];
	}
	s.length = t.length;
}

判断串是否相等

bool StrEqual(SqString s, SqString t)
{
	if (s.length != t.length)
		return false;
	else
	{
		for (int i = 0; i < s.length; i++)
		{
			if (s.data[i] != t.data[i])
				return false;
		}
		return true;
	}
}

  串长

int StrLength(SqString s)
{
	return s.length;
}

 串的连接

SqString ConStr(SqString s, SqString t)
{
	SqString str;
	int i, j;
	for (int i = 0; i < s.length; i++)
	{
		str.data[i] = s.data[i];
	}
	for (int j = 0; j < t.length; j++)
	{
		str.data[j + s.length] = t.data[j];
	}
	str.length = s.length + t.length;
	return str;
}

  求子串

SqString SubStr(SqString s, int i, int j)
{
	
	SqString str;
	str.length = 0;
	if (i<=0 || i>s.length || i + j - 1 > s.length)
		return str;
	else
	{
		for (int k = i-1; k < i + j - 1; k++)
		{
			str.data[k-i+1] = s.data[k]; 
		}
		str.length = j;
		return str;
	}
}

  子串插入

SqString InsStr(SqString s, int i, SqString t)
{
	int j;
	SqString str;
	str.length = 0;
	if (i <= 0 || i > s.length)
		return str;
	else
	{
		for (j = 0; j < i - 1; j++)
		{
			str.data[j] = s.data[j];
		}
		for (j = 0; j < t.length; j++)
		{
			str.data[j - 1 + i] = t.data[j];
		}
		for (j = i - 1; j < s.length; j++)
		{
			str.data[j + t.length] = s.data[j];
		}
		str.length = s.length + t.length;
		return str;
	}
}

  子串删除

SqString DelStr(SqString s, int i, int j)
{
	int k;
	SqString str;
	str.length = 0;
	if (i <= 0 || i > s.length || i + j - 1 > s.length)
		return str;
	else
	{
		for (k = 0; k < i - 1; k++)
		{
			str.data[k] = s.data[k];
		}
		for (k = i + j - 1; k < s.length; k++)
		{
			str.data[k-j] = s.data[k];
		}
		str.length = s.length - j;
		return str;
	}
}

  子串替换

SqString RepStr(SqString s, int i, int j, SqString t)
{
	int k;
	SqString str;
	str.length = 0;
	if (i <= 0 || i > s.length || i + j - 1 > s.length)
		return str;
	else
	{
		for (k = 0; k < i - 1; k++)
		{
			str.data[k] = s.data[k];
		}
		for (k = 0; k < t.length; k++)
		{
			str.data[i - 1 + k] = t.data[k];
		}
		for (k = i + j - 1; k < s.length; k++)
		{
			str.data[k-j+t.length] = s.data[k];
		}
		str.length = s.length + t.length - j;
		return str;
	}
}

  输出串

void DispStr(SqString s)
{
	if (s.length > 0)
	{
		for (int i = 0; i < s.length; i++)
			printf("%c", s.data[i]);
		printf("\n");
	}
}

  按字典顺序比较两个串大小

int StrCmp(SqString s, SqString t)
{
	int comlen;
	if (s.length > t.length)
		comlen = t.length;
	else
		comlen = s.length;
	for (int i = 0; i < comlen; i++)
	{
		if (s.data[i] > t.data[i])
			return 1;
		if (s.data[i] < t.data[i])
			return -1;
	}
	if (s.length > t.length)
		return 1;
	else if (s.length < t.length)
		return -1;
	else
		return 0;
}

  第一个最长连续相同字符

void LongestString(SqString s, int& Index, int& maxlen)
{
	int i = 1;
	int length, start;
	Index = 0;
	maxlen = 1;
	while (i < s.length)
	{
		start = i - 1;
		length = 1;
		while (s.data[i] == s.data[i - 1] && i <s .length)
		{
			i++;
			length++;
		}
		if (length > maxlen)
		{
			maxlen = length;
			Index = start;
		}
		i++;
	}
}

  

 

顺序串

标签:ring   指针   sqs   false   比较   顺序   传递   qstring   相等   

原文地址:https://www.cnblogs.com/KIROsola/p/11355285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!