用c语言实现strstr字符串,C语言模拟实现strstr函数,strrstr 函数

strstr和strrstr已经算是字符串中相对比较难的了,但是只要我们善于分析,解剖字符串,就会化难为易。其实学习代码的过程中需要我们静下心来分析,理解。

srtstr函数的功能及用法

原型:char *strstr(const char *dst, const char *src);

#include

找出src字符串在dst字符串中第一次出现的位置(不包括src的串结束符)。返回该位置的指针,如找不到,返回空指针。

代码:#include 

#include 

#include 

char *my_strstr(const char *dst, const char *src)

{

const char *str1 = dst;

const char *str2 = src;

const char *fast = NULL;

assert(dst);

assert(src);

while (*str1)

{

fast = str1;

while (*str1 && *str2 && *str1 == *str2)

{

str1++;

str2++;

}

if (*str2 == '\0')

return (char*)fast;

str1 = fast+1;

str2 = src;

}

return NULL;

}

int main()

{

char arr1[] = "abcdefgdefk";

char arr2[] = "defk";

char *ret = my_strstr(arr1,arr2);

if (*ret)

{

puts(ret);

}

return 0;

}

解析代码:

在main函数中定义两个字符串数组,char arr1[]="abcdefgdefk";char arr2[]="defk";在调用函数中用指针来接收,指针接收的优点是指针指向字符串的首地址,指针最好用const保护起来,以防被破坏。在调用函数中定义三个指针,char *sr1=dst,char* str2=src,char* fast=NULL(避免野指针),使用之前先断言指针是否存在,如果str1的内容存在进入循环,先将fsat=str1;如果str1指向的内容等于str2指向的内容,str1,str2的地址加加,如果str2的内容等于"\0"了,说明str2字符串的内容在str1字符串中出现,否则str1指向fast指针指向地址的后一个地址,str2返回到它的首地址,继续执行循环直到str2字符串在str1中第一次出现。

模拟实现strrstr函数

原型:char *strrstr(const char *str1, const char *str2);

#include

找出str2字符串在str1字符串中最后出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。#include 

#include 

#include 

char *my_strrstr(const char *dst,const char *src)

{

char *str1=dst;

char *str2=src;

char *fast=NULL;

char *last=NULL;

assert(dst);

assert(src);

while (*str1)

{

fast=str1;

while (*str1&&*str2&&*str1==*str2)

{

str1++;

str2++;

}

if (*str2 == '\0')

last=fast;

str1=fast+1;

str2 = src;

}

if (*str1 == '\0')

return /*(char *)*/last;

/*return NULL;*/

}

int main()

{

char *Qwe="asdfghasdgfdfgdfgdfgdfgdfg";

char *Zaq="dfg";

char *ret=my_strrstr(Qwe,Zaq);

puts(ret);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值