strchr、strrchr、memchr函数详解及模拟实现

xiaoxiao2021-02-28  92

strchr

函数介绍

函数原型:

char* strchr(const char* string,int c);

函数功能:在字符串中查找指定字符的第一个出现 返回值:如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。 代码实例:

char arr[] = "0asdfgqwqefgf"; char* ret = strchr(arr, 'f'); cout << ret << endl;//输出结果:fgqwqefgf

模拟实现

char* my_strchr(const char* str, int c) { assert(str); char* ret = (char*)str; while (*str && *str!=(char)c) { str++; } if ((char)c == *str) //包含了*str和c都为0的情况。 return (char *)str; return NULL; }

strrchr

函数介绍

函数原型:

char* strrchr(const char* string,int c);

函数功能:在字符串中查找指定字符的最后一个出现。 返回值:如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。 代码实例:

char arr[] = "/0asdfgazxcv"; char* ret = strrchr(arr, 'a'); cout << ret << endl;//输出结果:azxcv

模拟实现

//方法一,从头往后找 char* my_strrchr(const char* str, int c) { assert(str); char* ret = NULL; while (*str) { if (*str == (char)c)//如果存在,ret保存地址 ret = (char *)str;//强制转换指针类型,赋给ret str++; } if ((char)c == *str) //考虑str第一个字符为'\0'的情况 ret = (char *)str; //强制转换指针类型,赋给ret return ret; } // 方法二:从后往前找 char* my_strrchr1(const char* str, int c) { assert(str); char* ret = (char*)str; while (*str)//指向原str字符串最后一位 ++str; while (*str != (char)c && (str >= ret)) --str; if (str >= ret) return (char*)str; return NULL; }

memchr

函数介绍

函数原型:

void *memchr( const void *buf, int c, size_t count );

函数功能:从buf所指内存区域的前count个字节查找字符c。 返回值:如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。 代码实例:

char arr[] = "asdfgazxcv"; void* ret = memchr(arr, 'd',6); printf("%s\n", ret);//输出结果:dfgazxcv

模拟实现

void* my_memchr(const void* str, int c, size_t count) { assert(str); char* ret = (char*)str; while (count--) { if ((char)c == *ret) return ret; else ret++; } return NULL; }
转载请注明原文地址: https://www.6miu.com/read-62464.html

最新回复(0)