//模拟 库函数 strstr()函数 //从父字符串(较长)找到 完全相同子字符串(较短); //返回相同字符串在父字符串中的首字符的地址; #include<stdio.h> char * my_strstr(char arr[],char arr1[]) { char *p1=NULL,*p2=NULL,*p=NULL; int i = 0,j = 0,k=0,m=0; p1 =&arr[0]; p2 = &arr1[0]; while (1) { if (arr1[0] == ‘\0‘) { printf("子数组有效长度不正确!\n"); return NULL; } if(*p2==‘\0‘) break; i++; p2++; } while (1) { if (arr[0] == ‘\0‘) { printf("父数组有效长度不正确!\n"); return NULL; } if(*p1==‘\0‘) break; j++; p1++; } if (i > j) { printf("字数组比父数组大!无法查询!\n"); return NULL; } p1 =&arr[0]; p2 = &arr1[0]; j=0; while (1) { if (*p1 == *p2) { p = p1; p1++; p2++; m=0; k++; } else { p1++; j++; if(m==0) { m=1; k=0; p2=&arr1[0]; } } if (k == i) return p-k+1; if (p1 == NULL || p2 == NULL||*p1==‘\0‘) break; } return NULL; } int main() { char arr[20] = "0"; char arr1[20] = "0"; char* p = NULL; printf("请输入20字符以内的字符串:"); gets(arr); printf("请输入查询的子字符串:"); gets(arr1); p = my_strstr(arr, arr1); if (p == NULL) { printf("你的输入有问题或查找失败!\n"); } else printf("子字符串在父字符串中的首元素地址为:%p\n",p); printf("arr数组首元素地址为(自己对着数数):%p\n",&arr[0]); return 0; }
原文地址:http://shaungqiran.blog.51cto.com/10532904/1678518