数据结构实验(串的定义,基本操作及模式匹配)

实验名称:串的定义,基本操作及模式匹配

实验目的:

掌握这种抽象数据类型的特点;熟练掌握串的顺序存储结构表示和基本操作,并能利用这些基本操作实现串的其他各种操作。

实验要求:

  • 定义串的定长顺序存储结构;
  • 实现串赋值,求串长,求子串,串连接,串比较等基本操作,以及简单模式匹配:检索子串在主串中出现的次数及相应的位置。

代码:

分别用两种存储方式实现

  1. 串的定长顺序存储实现
//串的定长顺序存储结构

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;

#define MAXSTRLEN 255//可在255以内定义最大串长
typedef unsigned char SString[MAXSTRLEN+1];
//0号单元存放串长

//串赋值
Status StrAssign(SString &S,char *chars)
{
   	
	int i,j;char *c;
	for(i=0,c=chars;*c;++i,++c);
	if(i>MAXSTRLEN) return ERROR;
	else
	{
   
	S[0]=i;
	for(j=1;j<=S[0];j++)
		S[j]=*(chars+j-1);
	}
	return OK;
}//StrAssign

//创建串
Status CreateString(SString &T)
{
   
	 char chars1[50];
	 int k;
	 gets(chars1);
	 k=StrAssign(T,chars1);
	if(!k)
	{
   
		printf("串长超过MAXSTRLEN(=%d)\n",MAXSTRLEN);
		exit(0);
	}
	return OK;
}//CreateString


//求串长
int StrLength(SString S)
{
   
	return S[0];
}


//输出字符串
void StrPrint(SString S)
{
   
	int i;
	for(i=1;i<=S[0];i++)
	{
   
	  printf("%c",S[i]);
	}
	printf("\n");

}//StrPrint


//求子串
Status SubString(SString &Sub, SString S,int pos,int len)
{
   //用Sub返回串S的第pos个字符起长度为len的字串
	int i,j;
	if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
		return ERROR;
	if(!len)
	{
   
		Sub[0]=0;
	}
	else
	{
   
	for(i=1,j=pos;i<=len-1,j<=pos+len-1;i++,j++)
			Sub[i]=S[j];
			Sub[0]=len;
	}
		return OK;
}//SubString



//串连接
Status Concat(SString &T,SString S1,SString S2)
{
   //用T返回由S1和S2连接成的新串.
	//若未截断,则返回TRUE,否则返回FALSE.
	int i,j;
	Status uncut;
	if(S1[0]+S2[0]<=MAXSTRLEN)//未截断
	{
   
		T[0]=S1[0]+S2[0];
	for(i=1;i<=S1[0];i++)
	{
   
		T[i]=S1[i];
	}
	for(j=1;j<=S2[0];j++)
	{
   
		T[S1[0]+j]=S2[j];
	}
		uncut=TRUE;
	}
	else if(S1[0]<MAXSTRLEN)//截断
	{
   
		T[0]=MAXSTRLEN;
		for(i=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值