顺序串的模式匹配(BF算法)

#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 40
typedef struct {          /*串结构定义*/
    char ch[MAXLEN];
    int len;
}SString;

void createstring(SString *s)
{
	int i,j;
	char c;
	printf("请输入要建立的串的长度:");
	scanf("%d",&j);
	for(i=0; i<j; i++)
	{
		printf("请输入串的第%d个字符:",i+1);
		fflush(stdin);
		scanf("%c",&c);
		s->ch[i] = c;
	}
	s->len = j;
}

void output(SString *s)
{
	int i;
        if(s->len == 0)
            printf("字符串为空!");
        else
	    for (i=0;i<s->len;i++)
		printf("%c   ",s->ch[i]);
	printf("\n");
}
int StrIndex(SString s,int pos, SString t) 
{ 
	int i, j, start;
	if (t.len==0)  
		return(0);   /* 模式串为空串时,是任意串的匹配串 */
	start=pos; 
	i=start; 
	j=0;  /* 主串从pos开始,模式串从头(0)开始 */
	while (i<s.len && j<t.len){
		if (s.ch[i]==t.ch[j]) 
		{
			i++;
			j++;
		}   /* 当前对应字符相等时推进 */
		else 
		{ 
			start++;        /* 当前对应字符不等时回溯 */
			i=start; 
			j=0;   /* 主串从start+1开始,模式串从头(0)开始*/
		} 
	}
		if (j>=t.len) 
			return(start);    /* 匹配成功时,返回匹配起始位置 */
		else 
			return(-1);    /* 匹配不成功时,返回-1 */
}

int  main()
{
	SString *str1;
	SString  str2;
	int pos;
	int flag=0;
	str1 = (SString *)malloc(sizeof(SString));
	str1->len = 0;
	printf("建立字符串1:\n");
	createstring(str1);
	printf("建立字符串2:\n");
	createstring(&str2);
	printf("请输入要查找的位置:");
	scanf("%d",&pos);
	flag=StrIndex(*str1,pos,str2);
	if(flag == -1)
		printf("查找失败!");
	else
	{
		printf("出现的位置为:%d\n",flag);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值