用c语言实现:输入一个主串和一个子串,用KMP进行匹配,问进行几趟匹配才成功,若没成功,则输出0
时间: 2023-12-17 09:02:02 浏览: 118
C语言实现字符串匹配KMP算法
5星 · 资源好评率100%
下面是用C语言实现KMP算法进行字符串匹配的代码,包括了计算匹配次数的功能:
```
#include <stdio.h>
#include <string.h>
int KMP(char* s, char* p) {
int slen = strlen(s);
int plen = strlen(p);
int next[plen];
int i = 0, j = -1, count = 0;
// 计算next数组
next[0] = -1;
while (i < plen - 1) {
if (j == -1 || p[i] == p[j]) {
i++;
j++;
next[i] = j;
}
else {
j = next[j];
}
}
// KMP匹配
i = 0;
j = 0;
while (i < slen && j < plen) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
}
else {
j = next[j];
}
count++;
}
if (j == plen) {
return count;
}
else {
return 0;
}
}
int main() {
char str[100], pattern[100];
printf("请输入主串:");
scanf("%s", str);
printf("请输入子串:");
scanf("%s", pattern);
int count = KMP(str, pattern);
if (count) {
printf("匹配成功,进行了%d次匹配\n", count);
}
else {
printf("匹配失败\n");
}
return 0;
}
```
在主函数中,首先输入主串和子串,然后调用KMP函数进行匹配,并获取匹配次数。如果匹配成功,则输出匹配次数,否则输出“匹配失败”。
阅读全文