#include "stdio.h"
#include "string.h"
#include "malloc.h"
/*--------------------------------------------------------
函数名: int str_zi(char *,char *)
函数功能: 判断一个字符串是另一个字符串的子串
作者: HES
输入参数: 父串,子串
输出参数: 1---0
--------------------------------------------------------*/
int str_zi(char *str1,char *str2)
{
int len1=strlen(str1); //父串长度
int len2=strlen(str2); //子串长度
int i;
char * p;
if(len1<len2)return 0;
p=malloc(len2+1);
for(i=0;i<len2;i++)
p[i]=str1[i];
p[i]=0;
// printf("%s\n",p);
if(strcmp(p,str2)==0)return 1;
else str_zi(++str1,str2);
}
//-----------------------------------------------------------
void test_show(char *str1,char *str2)
{
printf("%s %s :%d\n",str1,str2,str_zi(str1,str2));
}
int main()
{
char str1[]="hesisone";
char str2[]="sisa";
char str3[]="siso";
char str4[]="one";
char str5[]="hes";
//---------------------------------------
test_show(str1,str2);
test_show(str1,str3);
test_show(str1,str4);
test_show(str2,str3);
test_show(str1,str5);
return 1;
}
上面这个递归版,在pc机上面可以正常使用,但是在单片机里面就有可能栈溢出,下面是轮询版,可以在单片机正常运行
#include<stdio.h>
#include<string.h>
/*--------------------------------------------------------
函数名: int checkchild(char *,char *)
函数功能: 判断一个字符串是另一个字符串的子串
作者: JUAN
输入参数: 子父串
输出参数: 1---0
--------------------------------------------------------*/
int checkchild(char *a,char *b)
{
int i,j;
int m,n,flag;
m=strlen(b);
n=strlen(a);
if(m<n)return 0;
for(i=0;i<=m-n;i++)
{
flag=1;
for(j=0;j<n;j++)
{
if(b[i+j]!=a[j]){
flag=0;
break;
}
}
if(flag==1)
break;
}
if(flag==1)return 1;
else return 0;
}