#include
#include
int c[10]; // 存入母串里与子串先等的字符
int flag=0; // C数组的下标
void fun(char a[],char b[])
{
int i;
for (i=0;i<strlen(a);i++)
{
if(a[i]==b[flag]) // 如果a[i]=子串的第一个字符
{
c[flag]=i;
flag++;
}
if(flag==strlen(b)) // flag等于子串的长度则说明已找到一种
{
for (int i=0;i<strlen(b);i++)
printf("%2d",c[i]);
printf("\n");
}
if(flag==strlen(b))
flag--; /***** 回溯 ****/
if(i==strlen(a)-1) // 如果循环到母串的最后一个字符了,说明子串最后一个字符已全部找到,再继续找子串倒数第二个字符
{
flag--;
i=c[flag];
}
}
}
int main()
{
/*********** 题目:判断子串在母串出现的总次数 ************/
/********* 思路:遍历母串,用一个数组接收母串在子串存在的字符的下标,
例如 abacbc下标为(0,1,2,3,4,5) 子串为 abc ,先找到a在找到b在找到c,然后输出在继续往后找C,重复此过程
*********/
char a[10]="rabbbit",b[10]="rabit" ; //a为母字符串,b为子字符串
fun(a,b);
}