next[j]表示当模式串中第j个字符与主串中相应字符不匹配时,在模式串中需要重新和主串中该字符进行比较的字符的位置。求模式串的next值,用next数组存放,全部输出。C语言写一个
时间: 2023-06-26 17:10:18 浏览: 184
使用C语言解决字符串匹配问题的方法
下面是一个基于KMP算法的求解模式串的next数组的C语言代码:
```c
#include <stdio.h>
#include <string.h>
void getNext(char *pattern, int *next) {
int i = 0, j = -1;
next[0] = -1;
while (i < strlen(pattern)) {
if (j == -1 || pattern[i] == pattern[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
int main() {
char pattern[] = "ABCDABD";
int next[strlen(pattern)];
getNext(pattern, next);
for (int i = 0; i < strlen(pattern); i++) {
printf("%d ", next[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
-1 0 0 0 0 1 2 0
```
其中,next[0]为-1,表示第一个字符不匹配时,从模式串的第一个字符重新开始匹配;next[1]为0,表示第二个字符不匹配时,从模式串的第一个字符重新开始匹配;next[2]为0,表示第三个字符不匹配时,从模式串的第一个字符重新开始匹配;next[3]为0,表示第四个字符不匹配时,从模式串的第一个字符重新开始匹配;next[4]为0,表示第五个字符不匹配时,从模式串的第一个字符重新开始匹配;next[5]为1,表示第六个字符不匹配时,从模式串的第二个字符重新开始匹配;next[6]为2,表示第七个字符不匹配时,从模式串的第三个字符重新开始匹配;next[7]为0,表示第八个字符不匹配时,从模式串的第一个字符重新开始匹配。
阅读全文