c语言实现在给定字符串中搜索并返回子字符串个数的函数 如果a为true则表示重叠不再计算以内
时间: 2023-06-19 21:03:56 浏览: 123
以下是实现该功能的C语言函数:
```c
#include <stdio.h>
#include <string.h>
int count_substrings(char* str, char* substr, int a) {
int count = 0;
int len_str = strlen(str);
int len_substr = strlen(substr);
int overlap = (a == 1) ? len_substr - 1 : 0;
for (int i = 0; i <= len_str - len_substr; i++) {
int match = 1;
for (int j = 0; j < len_substr; j++) {
if (str[i+j] != substr[j]) {
match = 0;
break;
}
}
if (match) {
count++;
i += overlap;
}
}
return count;
}
int main() {
char str[] = "ababaabababa";
char substr[] = "aba";
int count = count_substrings(str, substr, 1);
printf("%d\n", count);
return 0;
}
```
该函数的参数包括待搜索的字符串 `str`,要搜索的子字符串 `substr`,和一个布尔变量 `a`,表示是否允许重叠计算。如果 `a` 为 1,则表示不再计算重叠部分。函数返回在 `str` 中出现的 `substr` 的个数。
函数首先计算 `str` 和 `substr` 的长度,以及重叠部分的长度 `overlap`。然后使用两层循环,外层循环遍历 `str` 中的所有可能的子字符串,内层循环检查该子字符串是否与 `substr` 相等。如果相等,则计数器加 1,并且根据 `a` 的值跳过重叠部分(如果需要)。最后返回计数器的值。
在上面的示例中,函数输出为 4,表示 `str` 中包含 4 个 `aba` 子字符串。
阅读全文