1. 程式人生 > >模擬實現庫函式strchr、strrchr、memchr

模擬實現庫函式strchr、strrchr、memchr

①strchr函式【函式原型】:char* strchr(constchar* 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(constchar* 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 *my_memchr(void *buff, int ch, size_t count)
{
	char *ret = (char *)buff;//強轉為(char *),一個位元組一個位元組找
	while (*ret)
	{
		if (*ret == (char)ch)
		{
			return ret;
		}
		else
		{
			ret++;
		}
	}
	return NULL;//找不到返回NULL
}