admin管理员组文章数量:1794759
字符串函数(5)strstr函数的使用和模拟实现
这两天军训,真是累死了。两天没写博客了,今天更新一篇字符串函数,这个strstr函数比前几个字符串函数难一点,我尽量写详细一点。
strstr函数
strstr函数的功能
Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. The matching process does not include the terminating null-characters, but it stops there. strstr函数的格式 char * strstr ( const char *, const char * ); 写个代码看看吧
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#include <string.h>
int main()
{
char ch1[] = "i am student good student";
char ch2[] = "student";
char* ret = strstr(ch1, ch2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到");
return 0;
}
这个代码很简单就不多解释了。下面开始讲strstr函数的模拟实现。
strstr函数的模拟实现
所有的解释都放在代码里面啦,大家要认真看哦,我很认真找写欸。 不知道assert(断言)const(常量)的就看往期的字符串博客咯。
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(*str1 && *str2);
char* s1 = NULL;//si,s2的作用主要是代替str1和str2前进。使用了s1和s2就可以不改变str1和str2指向的东西,每一次循环重新将str1和str2赋给s1和s2就可以了。
char* s2 = NULL;
char* cp = str1;
if (*str2 == '\0')//如果子字符串的为斜杠0,直接返回str1,规则是这样的。
return str1;
while (*cp)//用两个循环嵌套,第一个循环
{
s1 = cp;//cp的作用是记忆str1的位置,如果目的字符串为"abbbcd"子字符串为"bbc"记忆就显得极为重要了。当目的字符串中的bb对应子字符串中的bb,可是一旦再次加一,两个
//字符串将不在相等,跳出第二个循环,此时cp++,再次回到一个循环,就可以完美打印出bbcd啦,其实可以给你们画图片的解释的,但是我相信大家都是很聪明的人,才不是我懒呢。
s2 = str2;
while (*s1 == *s2 && *s1 && *s2)//因为&&和数学上的且相似,*s1或*s2一但指向0就直接可以跳出循环了,这样写就比*s1!='\0'&&*s2!='\0'方便多了。
{
s1++;
s2++;
}
if (*s2=='\0')//当*s2指向'\0'就证明s2走完了,可以直接返回cp了。
return cp;
cp++;
}
return NULL;//如果走上面的过程还是没有找到,就证明找不到了,直接返回空就是啦。
}
int main()
{
char ch1[] = "i am a student good student";
char ch2[] = "student";
char* ret = my_strstr(ch1, ch2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到");
return 0;
}
我是结衣,大一在读,如果发现错误就在评论区告诉我吧。期待你的关注哦。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-09-16,如有侵权请联系 cloudcommunity@tencent 删除字符串char博客函数数学本文标签: 字符串函数(5)strstr函数的使用和模拟实现
版权声明:本文标题:字符串函数(5)strstr函数的使用和模拟实现 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754822068a1706899.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论