一、strchr()
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char *my_strchr(const char *str,int c)
{
assert(str);
while(*str)
{
if(*str == c)
return (char *)str; //找到后返回此时的位置
str++;
}
return NULL; //没找到
}
int main()
{
char *str = "abcdcdef";
char *ret = my_strchr(str,'d');
printf("%s\n",ret);
system("pause");
return 0;
}
char *my_strrchr(const char *str,int c)
{
const char *p = NULL;
assert(str);
while(*str)
{
if(*str == c)
{
p = str; //保存每一次出现该字符的地址
}
str++;
}
if(*str != '\0')
return (char *)p;
return NULL;
}
2.从后面数,遇到的第一个字符即为最后一次出现的字符
char *my_strrchr(const char *str,int ch)
{
const char *start = str; //将指定字符串首地址保存
assert(str);
while(*str)
{
str++;
}
//str--;
//while(*str--)
//{
// ;
//}
while((str >= start) && (*str != ch))
{
str--;
}
if(*str == ch)
return (char *)str;
return NULL;
}
3.调用strchr函数
char *my_strrchr(const char *str,int ch)
{
const char *cur = NULL;
const char *last = NULL;
assert(str);
while(cur = strchr(str,ch))
{
last = cur; //保存每一次找到的位置
str = cur+1;
}
return (char *)last;
}
char *my_strrstr(const char *str,const char *substr,int len1,int len2)
{
const char *l_start = str+len1-1;
const char *end = substr+len2-1;
assert(str);
assert(substr);
while(len1)
{
str = l_start;
while((len2 != 1) && (*substr == *str))
{
str--;
substr--;
len2--;
}
l_start = str;
if(len2 == 1)
return (char *)l_start;
if(*str != *substr)
{
l_start = l_start-1;
substr = end;
}
len1--;
}
return NULL;
}
char *my_strrstr(const char *str,const char *substr)
{
const char *last = NULL;
const char *cur = NULL;
assert(str);
if(!*substr)
return (char *)substr;
while(cur = strstr(str,substr))
{
last = cur; //每次保存找到的字符串的首位置
str = last+1; //使str指向下一位开始寻找
}
return (char *)last;
}