> 文章列表 > 顺序串的模式匹配(BF算法)

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

顺序串的模式匹配(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("字符串为空!");elsefor (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;
}