c语言查找子串个数
时间: 2023-07-03 15:23:02 浏览: 56
可以使用字符串匹配算法,例如KMP算法,来查找一个字符串中子串出现的次数。以下是一个简单的C语言程序,使用KMP算法来实现子串查找:
```c
#include <stdio.h>
#include <string.h>
// 计算next数组
void getNext(char *p, int next[]) {
int i = 0, j = -1;
next[0] = -1;
int len = strlen(p);
while (i < len) {
if (j == -1 || p[i] == p[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
// KMP算法实现子串查找
int kmp(char *s, char *p) {
int i = 0, j = 0;
int len1 = strlen(s);
int len2 = strlen(p);
int next[len2];
getNext(p, next);
int count = 0;
while (i < len1) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
if (j == len2) {
count++;
j = next[j];
}
}
return count;
}
int main() {
char s[] = "abcabcabc";
char p[] = "abc";
int count = kmp(s, p);
printf("子串个数为:%d\n", count);
return 0;
}
```
在上述程序中,`getNext`函数计算`p`字符串的next数组,`kmp`函数使用KMP算法匹配字符串,并统计子串出现的次数。在主函数中,我们输入一个字符串`s`和要查找的子串`p`,得到子串出现的次数。