基于已给的字符串匹配算法,编写一下两个函数: 1. int searchAllMatchingStr(char mainS[],char subS[],int pos[]) { // 编写代码来搜索主串 mainS 中所有与子串 subS 相匹配的位置,将每个匹配串的起始位置存入 pos中。 // 同时,返回主串 mainS 中与子串 subS相匹配的个数 return 0; } 该函数搜索主串 mainS 中所有与子串 subS 相匹配的位置,将每个匹配串的起始位置存入 pos中。同时,返回主串 mainS 中与子串 subS相匹配的个数。 比如: 主串输入为:mainS= {'a','r','b','c','d','p','w','d','p','a','r','p','d','p','w','a','o','d','p','w', 'd','p','a','y'}; 子串输入为:subS= {'d','p','w','d','p','a'}; 那么函数返回值为:2 数组pos中的值为:pos[0]=4,pos[1]=17
时间: 2023-09-20 16:12:32 浏览: 43
下面是基于已给的字符串匹配算法,实现搜索主串中所有与子串相匹配的位置的代码:
```c
int searchAllMatchingStr(char mainS[], char subS[], int pos[]) {
int i, j, k, count = 0;
int mainS_len = strlen(mainS);
int subS_len = strlen(subS);
for (i = 0; i <= mainS_len - subS_len; i++) {
for (j = i, k = 0; k < subS_len && mainS[j] == subS[k]; j++, k++);
if (k == subS_len) {
pos[count++] = i;
}
}
return count;
}
```
该函数中,使用了两层循环:外层循环遍历主串 mainS,内层循环遍历子串 subS,判断是否匹配。如果匹配成功,则将匹配串的起始位置存入 pos 数组中,并且 count 计数器加一。最后返回 count 的值即可,表示主串中与子串匹配的个数。
例如,对于输入的主串和子串:
```c
char mainS[] = {'a','r','b','c','d','p','w','d','p','a','r','p','d','p','w','a','o','d','p','w','d','p','a','y'};
char subS[] = {'d','p','w','d','p','a'};
```
调用函数 `searchAllMatchingStr(mainS, subS, pos)` 后,数组 pos 中的值为:pos[0]=4,pos[1]=17,函数返回值为 2,表示主串中有两个与子串匹配的位置。
阅读全文