主函数自行添加

头文件 + 宏定义

#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;
}

 

收藏 打印