对于前面strrchr函数的思考,
我想应该也存在strrstr这个函数的吧,可惜在msdn没找到!
假设存在这样一个函数strrstr()
原型:char *strrstr(char const *dst, char const *str);
功能:找出字符串str在dst字符串中最后一次出现的位置(不包括\0)
返回值:返回该位置的指针,如找不到,返回空指针
实现代码如下:
char *Strrstr(char const * arr, char const str[])
{
char const *last = NULL;
char const *start = arr;
int len = strlen(str);
int j = 0;
assert(arr);
assert(str);
while (*str == 0)
{
return 0;
}
while (*arr && *str)
{
start = arr;
while ((*arr == str[j]) && (*arr) && (str[j]))
{
//last = arr-len+1;
arr++;
j++;
}
if (str[j] == '\0')
{
last = start;
}
arr = start + 1;
j = 0;
}
if (*arr == '\0')
{
return last;
}
else
return NULL;
}
//更新 2017-2-27
char* Strstr(const char* str1, const char* str2)
{
assert(str1&&str2);
char* pstr = (char*)str1;
char* s1, *s2;
if (!*str2)
return pstr;
while (*str1)
{
s1 = pstr;
s2 = (char*) str2;
while (*s1&&*s2&& !(*s1 - *s2))
{
s1++; s2++;
}
if (!*s2) //到s2最后了,所以找到了
return pstr;
pstr++;
}
return NULL;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<assert.h>
int main()
{
char arr[] = "acddefdefgh";
char str[] = "def";
printf("%s\n", Strrstr(arr, str));
system("pause");
return 0;
}