用c语言编写程序,实现以下情况。 编写算法,统计子串t在主串s中出现的次数。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据在第一行中输入主串s,在第二行中输入子串t,s和t中不包含空格。 输出格式: 对于每组测试,若子串t在主串s中出现,则输出t在s中的子串位置和出现总次数,否则输出“0 0”。引号不必输出。 输入样例: 2 abbbbcdebb bb abcde bb 输出样例: 2 4 0 0
时间: 2024-03-27 16:39:07 浏览: 73
改进KMP算法.zip_KMP算法_c语言数据结构
5星 · 资源好评率100%
好的,我会尽力回答你的问题。对于你的问题,这里给出一个使用C语言实现统计子串出现次数的算法:
```c
#include <stdio.h>
#include <string.h>
int findSubstr(char *s, char *t, int *pos) {
int len1 = strlen(s);
int len2 = strlen(t);
int cnt = 0;
for (int i = 0; i <= len1 - len2; i++) {
int j;
for (j = 0; j < len2; j++) {
if (s[i + j] != t[j]) {
break;
}
}
if (j == len2) {
cnt++;
pos[cnt] = i + 1;
}
}
return cnt;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
char s[1001], t[101];
scanf("%s%s", s, t);
int pos[101], cnt = findSubstr(s, t, pos);
if (cnt) {
printf("%d %d\n", pos[1], cnt);
} else {
printf("0 0\n");
}
}
return 0;
}
```
以上算法的思路是:从主串s的第一个字符开始,依次查找与子串t相同的子串,若找到了,则记录下其位置,并继续向后查找,直到主串s被查找完毕。最后返回子串t在主串s中出现的次数。在主函数中,我们读入测试数据的组数T,然后依次读入每组测试数据,并输出统计结果。
希望这个算法对你有所帮助!
阅读全文