【数据结构】顺序串的插入算法,删除算法,连接运算,顺序串求子串算法

主函数自行添加

头文件 + 宏定义

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

串的顺序存储

typedef struct
{
	char str[MAXSIZE];
	int length;
}seqstring;

顺序串的创建

void creat(seqstring *S)
{
	char c;
	int i=0;
	while((c=getchar())!='\n')
	{
		S->str[i++]=c;
	}
	S->str[i]='\0';
	S->length=i;
	return ;
}

(1)插入运算

将字符串T插入到字符串S的第i个字符开始的位置上

void strinsert(seqstring *S,int i,seqstring T)
{
	int k;
	if(i<1 || i>S->length+1 || S->length + T.length>=MAXSIZE)
	{
		printf("can not insert\n");
		return ;
	}
	for(k=S->length-1;k>=i-1;k--)
	{
		S->str[k+T.length]=S->str[k];
	}
	for(k=0;k<T.length;k++)
	{
		S->str[k+i-1]=T.str[k];
	}
	S->length+=T.length;
	S->str[S->length]='\0';
}

(2)删除运算

将串S中从第i个字符起长度为len的字串删除

void strdelete(seqstring *S,int i,int len)
{
	int k;
	if(i<0 || i>S->length || i+len-1>MAXSIZE)
	{
		printf("can not delete\n");
		return ;
	}
	for(k=i-1;k<=S->length-1;k++)
	{
		S->str[k]=S->str[k+len];
	}
	S->length-=len;
	S->str[k]='\0';
	return ;
}

(3)顺序串的连接

将串S1和串S2连接

seqstring *strconcat(seqstring S,seqstring T)
{
	int i;
	seqstring *r;
	if(S.length+T.length>=MAXSIZE)
	{
		printf("can not concate\n");
		return NULL;
	}
	r=(seqstring*)malloc(sizeof(seqstring));
	for(i=0;i<S.length;i++)
	{
		r->str[i]=S.str[i];
	}
	for(i=0;i<T.length;i++)
	{
		r->str[S.length+i]=T.str[i];
	}
	r->length=S.length+T.length;
	r->str[r->length]='\0';
	return r;
}

(4)求子串运算

从串第i个字符开始取长度为len的子串返回

seqstring *substring(seqstring S,int i,int len)
{
	int k;
	seqstring *r;
	if(i<1 || i>S.length || i+len-1>S.length)
	{
		printf("substring error\n");
		exit(1);
	}
	else
	{
		r=(seqstring*)malloc(sizeof(seqstring));
		for(k=0;k<len;k++)
		{
			r->str[k]=S.str[i-1+k];
		}
		r->length=len;
		r->str[r->length]='\0';
	}
	return r;
}

 

  • 12
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值