【C语言】模拟实现库函数strchr、strrchr、memchr

①strchr函数

  • 【函数原型】:char* strchr(const char* string,int c);
  • 【函数功能】:在一个字符串中查找指定字符的第一次出现的位置。如果查找成功,返回该字符的地址,如果查找失败,则返回 NULL。

【参考代码】:

#include<stdio.h>
#include<assert.h>
char *my_strchr(char *str, int ch)
{
    assert(str != NULL);
    while (*str)
    {
        if (*str == ch)
        {
            return str;
        }
        str++;
    }
}
int main()
{
    char *str = "abcdef";
    int ch = 'd';
    char *ret = my_strchr(str, ch);
    printf("%s\n", ret);
    return 0;
}

②strrchr函数

  • 【函数原型】:char* strrchr(const char* string,int c);
  • 【函数功能】:在一个字符串中查找指定字符的最后一次出现的位置。 如果查找成功,返回该字符的地址,如果查找失败,则返回 NULL。

【参考代码】:

#include<stdio.h>
#include<assert.h>
char *my_strrchr(char *str, int ch)
{
    assert(str != NULL);
    char *ret =NULL;
    //记录字符ch出现位置,当循环走完,ret正是字符ch最后出现的位置
    while (*str)
    {
        if(*str == ch)
        {
            ret = str;
            str++;
        }
        else
        {
            str++;
        }
    }
    return ret;
}
int main()
{
    char *str = "adcdef";
    int ch = 'd';
    char *ret = my_strrchr(str, ch);
    printf("%s\n", ret);
    return 0;
}

③memchr函数

  • 【函数原型】:void *memchr( const void *buf, int c, size_t count );
  • 【函数功能】:从buf所指内存区域的前count个字节查找字符c。如果查找成功,返回该字符的位置,如果查找失败,则返回 NULL。

【参考代码】:

void *mymemchar(void *buffer,int ch,size_t count)
{
    assert(NULL!=buffer);
    while(count && (*(unsigned char *)buffer != (unsigned char )ch))
    {
        buffer=(unsigned char *)buffer +1;
        count--;
    }
    return (count ? (void *)buffer:NULL);
}

结语:

m 黑发不知勤学早,白首方悔读书迟

猜你喜欢

转载自blog.csdn.net/qq_41035588/article/details/81833880