c语音实习kmp算法
时间: 2023-11-14 08:10:50 浏览: 33
KMP算法是一种字符串匹配算法,它的核心思想是利用已知信息尽可能地减少匹配的次数。在C语言中实现KMP算法,可以参考以下步骤:
1. 预处理模式串,得到next数组,next[i]表示当模式串中第i个字符与主串中某个字符不匹配时,模式串应该跳到哪个位置继续匹配。
2. 在主串中匹配模式串,当匹配到主串中第i个字符和模式串中第j个字符不匹配时,根据next[j]的值将模式串向右移动j-next[j]个位置,继续匹配。
3. 如果匹配成功,返回主串中匹配的起始位置;否则返回-1。
下面是一个简单的C语言实现KMP算法的代码:
```
int kmp(char* s, char* p) {
int slen = strlen(s), plen = strlen(p);
int i = 0, j = 0;
int* next = getNext(p);
while (i < slen && j < plen) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
}
free(next);
if (j == plen) {
return i - j;
} else {
return -1;
}
}
int* getNext(char* p) {
int plen = strlen(p);
int* next = (int*)malloc(sizeof(int) * plen); next[0] = -1;
int i = 0, j = -1;
while (i < plen - 1) {
if (j == -1 || p[i] == p[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
return next;
}
```
相关推荐
![image/jpeg](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)