//模拟 库函数 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;
}
转载于:https://blog.51cto.com/shaungqiran/1678518