串的模式匹配(普通算法)

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

#define Error 0
#define Ok  1
#define MAXSIZE  256
typedef int Status;
typedef struct {
	char str[MAXSIZE];
	int length;
}SqString;      //使用串的顺序存储表示来存储串
Status  StrAssign(SqString &T,char chars[],int i){             //生成一个值等于chars的串T
	int j;
	T.length=0;
	 j=0;
    for(j=0;j<i;j++)
	{
		T.str[j]=chars[j];
	}
	T.length=j;
	return Ok;
}
int Index(SqString s,SqString T,int pos)  //求子串位置的定位函数
{
	int i,j=0;
	i=pos;
	while(i<=s.length-1&&j<=T.length-1)
	{
		if(s.str[i]==T.str[j]) 
		{
			i++;j++;                //当主串与子串出现相等的情况的时候,i和j都++,继续查找下一位是不是相同
		}
		else
		{
			i=i-j+1;j=0;       //当发生不匹配时,指针倒退回第一个匹配的下一位,由于书上的数组0位是记录数组长度的,而我这里从0
			                 //开始存储的串,所以求退回时是i-j+1而不是+2
		}
	}
	if(j>T.length-1)  return i-T.length;
	else return Error;
}
void print(SqString T)                        //输出串
{
	int i;
	for(i=0;i<T.length;i++)
		printf("%c",T.str[i]);
	printf("\n");
}
void  main()
{
	SqString  s,t;
	int pos,i,j,k;
	pos=0;
	char  chars[] ={'a','b','a','b','c','a','b','c','a','c','b','a','b'};
	char  charss[]={'a','b','c','a','c'};
	i=sizeof(chars)/sizeof(char);
	j=sizeof(charss)/sizeof(char);
	// i=strlen(chars);   
	StrAssign(s,chars,i);
	StrAssign(t,charss,j);
	printf("主串为");
	print(s);
	printf("模式串为");
	print(t);
	k=Index(s,t,pos);
	printf("模式串在主串第几个位置之后匹配%d",k);
	getchar();
	getchar();
}
这个是串的模式匹配的一般算法,当主串与子串的值相同时,两个指针就向后移,当出现不同时,主串的指针回到第一个相同的地方再加一,子串的指针置为0,直到将子串中的全部找到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值