【数据结构】串的基本操作及应用

分别定义两个结构体——串的定长顺序存储、串的堆式顺序存储

typedef struct
{
	char ch[MAXSTRLEN+1];
	int length;
}SString;
typedef struct
{
	char *ch;
	int length;
}HString;

 

问题:

1、编写函数,串用定长顺序存储表示来实现串的基本操作;

2、 编写串的匹配算法,实现查找功能。

算法思想阐述:

BF算法:首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则S向右移动一个字符的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。

该算法最坏情况下要进行M*(N-M+1)次比较, 时间复杂度为O(M*N)

 

一、各函数代码如下  

  解题一:

//生成串 
Status StrAssign(SString &S,char chars[])
{
	int i;	
	S[0]=strlen(chars);
	for(i=0;chars[i]!='\0'&&i+1<MAXSTRLEN;i++){
		S[i+1]=chars[i]; 
	}
	S[i+1]='\0';
	return OK; 
}
//输出串
void PrintStr(SString S)
{
	int i;
	for(i=1;i<S[0]+1;i++){
		cout<<S[i];
	}
	cout<<endl;
}
//求串长
Status StrLength(SString S)
{
 	return S[0];
}
//判空
Status StrEmpty(SString S)
{
	if(S[0]==0){
		return OK;
	}
	else{
		return FALSE;
	}
}
//比较字符串
Status StrCompare(SString S,SString T)
{
 	int i=0;
 	for(i=0;i<S[0]&&i<T[0];i++){
 		if(S[i]!=T[i])
 		    return S[i]-T[i];
	 }
	return S[0]-T[0];
}
//字符串连接:用T返回由S1和S2连接成的新串 
Status Concat(SString &T,SString S1,SString S2)
{
 	int i,j;
 	if(S1[0]+S2[0]<=MAXSTRLEN){
 		//未超出用户定义的最大串长
		 for(i=1;S1[i]!='\0';i++){
		 	T[i]=S1[i];
		 } 
		 for(j=1;S2[j]!='\0';j++){
		 	T[S1[0]+j]=S2[j];
		 }
		 //两次循环连接两串
		 T[S1[0]+j+1]='\0';
		 T[0]=S1[0]+S2[0]; 	 
	 }
	 else if(S1[0]<MAXSTRLEN){
	 	//超出用户定义的最大串长,这里会出现截断情况 
	 	for(i=1;S1[i]!='\0';i++){
		 	T[i]=S1[i];
		 } 
		for(j=1;j<=MAXSTRLE
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jesonary

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

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

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

打赏作者

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

抵扣说明:

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

余额充值