用C语言写出一个模拟实现strstr函数的代码,返回类型为char*

发布时间:2023年12月27日

//模拟实现strstr
(字符中的元素是连续存放的,所以不会存在跳动存放的情况,例如a1="ababcd",a2="ac"此结果就是NULL)
情况1.arr1="abcd"arr2="abc"(一次匹配就找到了)
情况2.arr1="ababcd"arr2="abc"(多次匹配才能找到)
//#include <stdio.h>
//#include <string.h>
//#include<assert.h>
//char* my_strstr(char* str1, const char* str2)
//{
//?? ?assert(str1 && str2);//断言是为了保证两个指针有意义
//?? ?//设置s1,s2的原因是为了防止改动str1或str2会影响查找时位置的变动,因此提前保存或创建一份
//?? ?const char* s1 = str1;
//?? ?const char* s2 = str2;
//?? ?const char* p = str1;
//?? ?while (*p)
//?? ?{
//?? ??? ?s1 = p;//为了让s1随p的变动而变动(是为了情况2发生时直接跳过多余操作)
//?? ??? ?s2 = str2;
//?? ??? ?while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
//?? ??? ?//*s1 == *s2是为了说明此位置的字符相等,然后经过各自的自增去查找后面的是否相等
//?? ??? ?//*s1 != '\0' && *s2 != '\0'是为了说明,找子字符串时都找到末尾了,只能是找到或没找到
//?? ??? ?{
//?? ??? ??? ?s1++;
//?? ??? ??? ?s2++;
//?? ??? ?}
//?? ??? ?if (*s2 == '\0')//*s2 == '\0'是为了说明s2已经全部找到才会等于\0,因此返回p(子字符串所在字符串的第一个字符的位置)
//?? ??? ?{
//?? ??? ??? ?return p;
//?? ??? ?}
//?? ??? ?p++;//当判断此处的情况同于情况2时,就直接进行下一位的匹配,跳过多于步骤
//?? ?}
//?? ?return NULL;//此处返回的值均为ret的值
//}
//int main()
//{
//?? ?char str[] = "This is a simple string";
//?? ?char* pch= "simple";
//?? ?char* ret = my_strstr(str,pch);//此处的ret的类型char*时声明函数的返回类型,应保持一致
//?? ?if (ret == NULL)
//?? ?{
//?? ??? ?printf("子字符串不存在于字符串中\n");
//?? ?}
//?? ?else
//?? ?{
//?? ??? ?printf("子字符串不存在于字符串中,为:%s\n",ret);
//?? ?}
//?? ?return 0;
//}


?

文章来源:https://blog.csdn.net/2201_75570527/article/details/135242937
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。