#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;
}
顺序串的模式匹配(BF算法)
最新推荐文章于 2024-05-30 20:31:47 发布