顺序串

Posted kirosola

tags:

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

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

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++;
	

  

 

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

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

串的数据结构表——顺序串与链式串

数据结构-串的定长顺序存储

实现顺序串的各种模式匹配算法

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

顺序串的实现及应用