串-数据结构(12)

一、解析

串(或字符串)是由零个或多个字符组成的有限序列。一般在S[0]的位置上放置的是该字符串的字符长度。其实就是字符串了,这个串的数据结构一般的在各种语言中都有实现的。参考书上第四章,其中有个很重要的kmp模式匹配很值的去看,然而我不会,因此略过。

二、存储结构

typedef unsigned char SString[MAXSTRLEN + 1];

三、操作

#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
//定长顺序存储
Status Concat(SString &T,SString S1,SString S2){
	//用T返回由S1和S2联接而成的新串。若未截断,则返回True,否则false
	if (S1[0] +S2[0]<=MAXSTRLEN)
	{
		//不需要截断
	}
	else if (S1[0] <MAXSTRLEN)
	{
		//截断
	}
	return true;
}
void PrintfSString(SString s){
	for (int i = 1; i <= s[0]; i++)
	{
		printf("%c", s[i]);
	}
}
void CreateString(SString &S,char * str){
	int count = 0,j = 1;
	while (str[count] != '\0')
	{
		S[j] = str[count];
		count++;
		j++;
	}
	S[0] = count;
	printf("%d\n", count);
}

int Index(SString S,SString T ,int pos){
	//返回子串T在主串S中的第pos个字符之后的位置。若不存在,函数值为0.
	//其中,T非空 、pos[1,StrLength(S)]
	int i = pos;//子串中的位置
	int j = 1;//主串中的位置
	while (j <= T[0] && i <=S[0])
	{
		if (S[i] == T[j])
		{
			//匹配成功
			i++; j++;
		}
		else
		{
			//匹配失败 j复位
			i = i - j + 2;
			j = 1;

		}

	}
	if ( j>T[0])
	{
		return i - T[0];
	}
	else
	{
		return 0;
	}
}

四、执行

	SString s1;
	CreateString(s1,"asdfghjkl");
	PrintfSString(s1);
	SString s2;
	CreateString(s2, "fgh");
	PrintfSString(s2);

	int pos = Index(s1,s2,1);
	printf("返回的位置:%d\n",pos);
输出:
9
asdfghjkl3
fgh返回的位置:4
请按任意键继续. . .






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值