串——顺序结构

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct
{
	char data[MaxSize];
	int length;
}SqString;

//串赋值
void Assign(SqString& s, char str[])
{
	int i = 0;
	while (str[i] != '\0')
	{
		s.data[i] = str[i];
		i++;
	}
	s.length = i;
}

//销毁串
void DestroyStr(SqString s)
{

}

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

//求串长度
int StrLength(SqString s)
{
	return s.length;
}

//判断串相等
int StrEqual(SqString s,SqString t)
{
	int i;
	if(s.length != t.length)
		return 0;
	else
		for (i = 0; i < s.length; i++)
		{
			if (s.data[i] != t.data[i])
				return 0;
			
		}
	return 1;
}

//串连接
SqString Concat(SqString s, SqString t)
{
	SqString r;
	int i, j;
	for (i = 0; i < s.length; i++)
	{
		r.data[i] = s.data[i];
	}
	for (j = 0; j < t.length; j++)
	{
		r.data[s.length + j] = t.data[j];
	}
	r.length = i + j;
	return r;
}

//求子串运算
SqString SubStr(SqString s, int i, int j)
{
	SqString t;
	int k;
	if (i<1 || i>s.length || j<1 || i + j>s.length + 1)
	{
		t.length = 0;
	}
	else {
		for (k = i - 1; k < i + j - 1; k++)
		{
			t.data[k - i + 1] = s.data[k];
		}
		t.length = j;
	}
	return t;
}

//查找字串的位置运算
int Index(SqString s, SqString t)
{
	int i = 0, j = 0;
	while (i < s.length && j < t.length) 
	{
		if (s.data[i] == t.data[j])
		{
			i++;
			j++;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
	}
	if (j >= t.length)
		return i - t.length + 1;
	else
		return 0;
}

//子串插入运算
int InStr(SqString& s, int i, SqString t)
{
	int j;
	if (i<1 || i>s.length + 1)
	{
		return 0;
	}
	else
	{
		for (j = s.length - 1; j >= i - 1; j--)
			s.data[j + t.length] = s.data[j];
		for (j = 0; j < t.length; j++)
			s.data[i + j - 1] = t.data[j];
		s.length = s.length + t.length;
		return 1;
	}

}

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

//子串替换
SqString RepStrAll(SqString s, SqString s1, SqString s2)
{
	int i;
	i = Index(s, s1);
	while (i > 0)
	{
		DelStr(s, i, s1.length);
		InStr(s, i, s2);
		i = Index(s, s1);
	}
	return s;
}

//输出串运算算法
void DispStr(SqString s)
{
	int i;
	for (i = 0; i < s.length; i++)
	{
		printf("%c ", s.data[i]);
	}
	printf("\n");
}

int main()
{
	SqString s1, s2, s3, s4, s5, s6;
	char a[] = "abcd";
	Assign(s1,a );
	printf("s1:"); DispStr(s1);
	printf("长度:%d\n",StrLength(s1));
	
	StrCopy(s2, s1);
	printf("s2:"); DispStr(s2);
	printf("长度:%d\n", StrLength(s2));
	printf("s1和s2 %s\n", (StrEqual(s1, s2) == 1 ? "相同" : "不相同"));
	
	char b[5] = "1234";
	Assign(s3,b );
	printf("s3:"); DispStr(s3);
	printf("长度:%d\n", StrLength(s3));

	printf("s1和s3 拼接");
	s4 = Concat(s1, s3);
	DispStr(s4);
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风残月Lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值