用C写一段代码:实现并检验堆存储串的两种模式匹配算法
时间: 2024-05-26 18:10:31 浏览: 49
ac算法.rar_C/C++_
好的,以下是代码:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int BF_match(char *s, char *p) {
int slen = strlen(s), plen = strlen(p);
for (int i = 0; i <= slen - plen; i++) {
int j = 0;
for (; j < plen; j++) {
if (s[i + j] != p[j]) break;
}
if (j == plen) return i;
}
return -1;
}
void shi_match(char *s, char *p) {
int slen = strlen(s), plen = strlen(p), i = 0, j = 0, next[MAX_LEN];
next[0] = -1;
while (i < plen) {
if (j == -1 || p[i] == p[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
i = j = 0;
while (i < slen && j < plen) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if (j == plen) {
printf("匹配成功!模式串在主串中的位置是:%d\n", i - j);
} else {
printf("没有找到匹配的字符串!\n");
}
}
int main() {
char s[MAX_LEN], p[MAX_LEN];
printf("请输入主串和模式串:\n");
scanf("%s %s", s, p);
printf("使用暴力匹配算法,匹配结果为:%d\n", BF_match(s, p));
printf("使用KMP算法,");
shi_match(s, p);
return 0;
}
该程序中,BF_match函数使用的是暴力匹配算法,shi_match函数使用的是KMP算法。您可以输入任意两个字符串来测试算法。
阅读全文