C语言计算字符串中子串出现的次数 。
时间: 2023-05-21 09:04:14 浏览: 301
计算字符串中子串出现的次数
5星 · 资源好评率100%
可以使用字符串匹配算法实现计算字符串中子串出现的次数,比如KMP算法。以下是一份基于KMP算法的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 计算next数组
void getNext(char *pattern, int *next, int len)
{
int i = 0, j = -1;
next[0] = -1;
while (i < len) {
if (j == -1 || pattern[i] == pattern[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
// 计算子串出现次数
int countSubstr(char *text, char *pattern)
{
int ans = 0;
int text_len = strlen(text);
int pattern_len = strlen(pattern);
int *next = (int *)malloc(sizeof(int) * pattern_len);
getNext(pattern, next, pattern_len);
int i = 0, j = 0;
while (i < text_len) {
if (j == -1 || text[i] == pattern[j]) {
i++;
j++;
} else {
j = next[j];
}
if (j == pattern_len) { // 找到匹配
ans++;
j = next[j]; // 继续查找
}
}
free(next);
return ans;
}
int main()
{
char text[100], pattern[100];
printf("请输入文本串和模式串:\n");
scanf("%s %s", text, pattern);
int cnt = countSubstr(text, pattern);
printf("模式串在文本串中出现了%d次\n", cnt);
return 0;
}
```
其中getNext函数用于计算KMP算法中的next数组,countSubstr函数用于计算子串出现次数。使用该程序,你可以输入任意文本串和模式串,计算出模式串在文本串中出现的次数。
阅读全文