判斷一個字串是另一個的子串
阿新 • • 發佈:2018-12-24
#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; }