strstr函数的自我实现,功能是在arr1字符串里找是否存在arr2字符串,并返回找到的arr2字符串首元素的位置
#include<stdio.h>
//strstr函数的自我实现
char* my_strstr(const char* arr1,const char* arr2)
{
while(*arr1)
{
if(*arr1 == *arr2)
{
char* temp1 = arr1;
char* temp2 = arr2;
while(*temp1 == *temp2)
{
temp1++;
temp2++;
if(*temp2 =='\0')
return arr1;
}
}
arr1++;
}
return NULL;
}
int main()
{
char arr1[] = "abcdefabcdef";
char arr2[] = "efa";
char arr3[] = "fab";
char arr4[] = "abs";
char* find_arr2 = my_strstr(arr1,arr2);
if(find_arr2)
{
int result2 = (int)(find_arr2 - arr1) +1;
printf("找到%s子串了,在%d位置处\n",arr2,result2);
}
else
printf("没找到%s子串\n",arr2);
char* find_arr3 = my_strstr(arr1,arr3);
if(find_arr3)
{
int result3 = find_arr3 - arr1 +1;
printf("找到%s子串了,在%d位置处\n",arr3,result3);
}
else
printf("没找到%s子串\n",arr3);
char* find_arr4 = my_strstr(arr1,arr4);
if(find_arr4)
{
int result4 = find_arr4 - arr1 +1;
printf("找到%s子串了,在%d位置处\n",arr4,result4);
}
else
printf("没找到%s子串\n",arr4);
return 0;
}
(解析)
1.关于函数的实现,先传入两个字符串(首元素)地址,比较arr1里面每个元素是不是等于arr2第一个元素,如果不等于接着往下找(arr1地址加1),等于的话判断:
2.将arr1,arr2此时的地址分别传给临时指针变量temp1,temp2,相等的话两个地址同时加1,然后再进行比较,如果temp2的地址指向了’\0’,则意思是arr2这个字符串里的元素和arr1某个子串完全一样,此时可以返回arr1地址(注意,不是temp1地址,因为temp1负责移动比较,此时temp1地址已经移动)
3.如果想算在第几个地址处,可以拿返回的地址减去arr1起始元素地址,得到差值加一
因为这样的代码块出现了很多次,所以我们可以把它放到一个函数里简化
if(find_arr2)
{
int result2 = (int)(find_arr2 - arr1) +1;
printf("找到%s子串了,在%d位置处\n",arr2,result2);
}
else
printf("没找到%s子串\n",arr2);
即简化为
#include<stdio.h>
//strstr函数的自我实现
char* my_strstr(const char* arr1,const char* arr2)
{
while(*arr1)
{
if(*arr1 == *arr2)
{
char* temp1 = arr1;
char* temp2 = arr2;
while(*temp1 == *temp2)
{
temp1++;
temp2++;
if(*temp2 =='\0')
return arr1;
}
}
arr1++;
}
return NULL;
}
void decide(char* arr1,char* arr2,char* arr3)
{
if(arr3)
{
int result = (int)(arr3 - arr1) +1;
printf("找到%s子串了,在%d位置处\n",arr2,result);
}
else
printf("没找到%s子串\n",arr2);
}
int main()
{
char arr1[] = "abcdefabcdef";
char arr2[] = "efa";
char arr3[] = "fab";
char arr4[] = "abs";
char* find_arr2 = my_strstr(arr1,arr2);
decide(arr1,arr2,find_arr2);
char* find_arr3 = my_strstr(arr1,arr3);
decide(arr1,arr3,find_arr3);
char* find_arr4 = my_strstr(arr1,arr4);
decide(arr1,arr4,find_arr4);
return 0;
}
这样就简单一点了
博客主要介绍了C语言中strstr函数的自我实现。该函数用于在一个字符串里查找另一个字符串是否存在,并返回其首元素位置。详细说明了实现步骤,包括传入字符串地址、比较元素、使用临时指针变量等,还提到可将代码块封装成函数简化。
1222

被折叠的 条评论
为什么被折叠?



