定制网站建设官网,wordpress 表格小工具,收费搭建网站,百度账号注册入口C语言之strstr函数的模拟实现 文章目录 C语言之strstr函数的模拟实现1. strstr函数的介绍2. strstr函数的使用3. strstr的模拟实现3.1 实现思路3.2 实现代码 1. strstr函数的介绍
函数声明如下#xff1a;
char * strstr ( const char * str1, const char * str2 ); strs…C语言之strstr函数的模拟实现 文章目录 C语言之strstr函数的模拟实现1. strstr函数的介绍2. strstr函数的使用3. strstr的模拟实现3.1 实现思路3.2 实现代码 1. strstr函数的介绍
函数声明如下
char * strstr ( const char * str1, const char * str2 ); strstr函数是用于在字符串str1中找str2字符串第一次出现的位置如果找到改位置则将这个位置返回找不到则返回一个空指针NULL strstr函数比较元素时不包含 \0以 \0 作为结束的标志
2. strstr函数的使用
#include stdio.h
#include string.hint main()
{char arr1[] abcadefdef;char arr2[] def;char * ret strstr(arr1, arr2);if (ret ! NULL){printf(%s\n, ret);}else{printf(找不到\n);}return 0;
}如果arr1字符串中是否有arr2 def 这三个字符必须得是连续的 然后用ret来接收strstr函数的返回值 如果arr1中有出现arr2这个字符串则返回第一次出现的地址 否则则返回一个空指针 最后继续判断是否为空指针如果不是则打印第一次出现的位置
运行结果如下
3. strstr的模拟实现
3.1 实现思路
假设有两个字符数组 str1中的字符串为 a b b b c d e f \0 str2中的字符串为 b b c \0
当将这两个字符串传给strstr函数时传入的是首元素地址所以str1指向字符 a str2指向字符 b 要判断str1字符串中是否有str2字符串首先str1要从第一个元素开始比较如果从第一个元素就错了所以要通过指针偏移的方式来找到第二个元素如果两个元素相同那么str1 和 str2 都偏移一个字节找到下一对要比较的元素 当指针偏移到第二个元素的时候当第二遍比较的时候str1 和 str2 前两个字符都相同此时str1指向第三个元素 b str2指向第二个元素 b 然后str1 和 str2 都偏移一个字节找到下一个元素 str1 找到第四个元素 bstr2 找到第三个元素 c此时两个元素不相同str1 得回到比较时的位置str2 得回到起始位置
3.所以我们可以定义两个指针变量用来记录str1比较时的位置和str2的起始位置假设为s1 和 s2
通过比较s1 和 s2 的元素判断是否相符合如果不符合s1 回到 str1的位置 s2回到 str2 的位置 然后str1找到下一个元素从这个元素开始比较当s2指向\0的时候则返回str1的地址我们也可以定义一个cur来存放str1的地址这样比较清晰一点
3.2 实现代码
#include stdio.h
#include string.h
#include assert.hchar* my_strstr(const char* str1, const char* str2)
{const char* cur str1; //用cur用来记录当前的位置const char* s1 NULL; //通过s1 和 s2 比较元素const char* s2 NULL;assert(str1 str2); //assert断言如果传入的地址有有一个会空指针则直接返回str1的地址if (str2 \0)return (char*)str1;while (*cur) //当cur中的值不为\0时进入循环{s1 cur; //s1回到比较时的位置s2 str2; //s2回到初始位置while (*s1 *s2) //当s1和s2指向的值相等时进入循环{s1; //找到下一个元素s2; //找到下一个元素//再次比较}if (*s2 \0) //当s2中的元素为\0时则说明在str1中找到了str2return (char*)cur; //返回当前的位置cur; //第一次没找到找到下一个元素重新寻找}return NULL; //如果在循环中没有找到则返回一个空指针
}int main()
{char arr1[] abcadefdef;char arr2[] def;char* ret my_strstr(arr1, arr2);if (ret ! NULL){printf(%s\n, ret);}else{printf(找不到\n);}return 0;
}运行结果如下