假设串采用顺序串存储结构。设计一个算法求串t在串s中出现的次数,如果不是子串返回0。基于BF算法求解。例如"aa"在"aaaab"中出现2次。用C语言
时间: 2024-10-14 16:11:00 浏览: 48
当我们在顺序串(如字符数组)中查找一个子串 t 的出现次数时,可以使用暴力匹配或叫做“Brute Force”(简单遍历)的方式来实现。这里我们可以基于朴素搜索(即滑动窗口法)的概念,结合 Boyer-Moore 算法的思想,但这里我们更偏向于简单的遍历。
下面是使用 C 语言的一个基本版本的算法:
```c
#include <stdio.h>
#include <string.h>
int countSubstrInStr(char *s, char *t) {
int count = 0;
int i, j;
// 首先确保子串不为空
if (!t || !*t) {
return 0;
}
// 主字符串长度
int len_s = strlen(s);
// 子字符串长度
int len_t = strlen(t);
for (i = 0; i <= len_s - len_t; i++) { // 滑动窗口从0开始到len_s-len_t
for (j = 0; j < len_t; j++) { // 对每个字符检查是否匹配
if (s[i + j] != t[j]) {
break; // 如果不匹配,跳过这个位置继续寻找
}
}
// 匹配完成,说明找到了一个子串
if (j == len_t) {
count++;
i += len_t - 1; // 跳过已匹配的部分,继续下一个可能的位置
}
}
return count;
}
int main() {
char s[] = "aaaab";
char t[] = "aa";
printf("'%s' 在 '%s' 中出现次数: %d\n", t, s, countSubstrInStr(s, t));
return 0;
}
```
阅读全文