1.模拟实现strchr,该函数的功能是在一个字符串里查找出第一次出现的某个字符,返回该字符第一次出现的地址,找不到则返回空。例如:strchr("i am a student ",'a')它会返回am a student 。
实现:
#include<stdio.h>
#include<assert.h>
char *my_strchr(const char *arr, char c) //对被查找字符串加保护,使得程序更安全
{
assert(arr); //检验传过来的字符串
while (*arr)
{
if (*arr == c)
{
return arr;
}
else arr++;
}
return NULL;
}
int main()
{
char arr[] = "i am a student";
char *ret = my_strchr(arr, 'a'); //这里在arr字符串数组里查找a
printf("%s", ret); //结果为am a student
getchar();
return 0;
}
2.模拟实现strrchr,
该函数的功能是在一个字符串里查找出最后一次出现的某个字符,返回该字符最后一次出现的地址,找不到则返回空。例如:strrchr("i am a student ",'a')它会返回a student 。
#include<stdio.h>
#include<assert.h>
char *my_strrchr(char *arr, char ch)
{
assert(arr);
char *ret = NULL;
while (*arr)
{
if (*arr == ch)
{
ret = arr;
arr++;
}
else
arr++;
}
return ret;
}
int main()
{
char arr[]="i am a student";
char *ret = my_strrchr(arr, 'a');
printf("%s", ret);
getchar();
return 0;
}
3.模拟实现strrstr,该函数的功能是在一个字符串中查找子字符串最后一次出现的位置。
#include<stdio.h>
#include<assert.h>
char *my_strrstr(const char *dest,const char *str)
{
assert(dest);
assert(str);
const char *str1 = str;
char *tmp = NULL;
while (*dest)
{
while (*dest == *str1)
{
dest++;
str1++;
}
if (*str1 == '\0')
{
tmp = (char*)dest;
str1 = str;
}
dest++;
}
return tmp;
}
int main()
{
char arr[] = "banana";
char *ret = my_strrstr(arr, "na");
printf("%s", ret);
getchar();
return 0;
}