模拟几个简单函数记录

递归模拟strlen

#include<assert.h>
size_t mock_strlen(const char*arr)
{
	assert(arr != NULL);
	if(*arr!='\0')
	{
	return mock_strlen(arr+1) + 1;
	}
	else
	{
		return 0;
	}
}

int main()
{
	char arr[] = "how are you";
	printf("%d\n", mock_strlen(arr));

	return 0;
}

指针-指针模拟strlen

#include<assert.h>
size_t mock_poin_strlen(const arr)
{
	assert(arr!=NULL);
	char* a = arr;
	while (*a++!='\0')
	{
	}
	return a - arr;
}

int main()
{
	char arr[] = "how are you";
	
	printf("%d\n",mock_poin_strlen(arr));

	return 0;
}

模拟strcpy

#include<assert.h>

void Get(char* arr1, const char* arr2);
int main()
{
	char arr[] = "hanshtretwtu";
	char arr1[] = "HELLWODE";

	Get(arr, arr1);
	printf("%s\n", arr);

	return 0;
}

void Get(char* arr1, const char* arr2) {
	char*ele_add=arr1;
	assert(arr1&&arr2);
	while (*arr1++ = *arr2++) {//结果赋值’\0‘时为假,停止
	}
	return ele_add;
}

模拟strncpy

char* mock_strncpy(char*pa1,char*pa2,int a)
{
	char* s = pa1;
	while (a && (*pa1++ = *pa2++) != '\0')
	{
		a--;
	}
	if (a)
		while (--a)
			*pa1++ = '\0';

	return s;
}


int main()
{

	int a = 5;
	char arr[] = "hehehehe";
	char arr1[] = "aaa";
	
	printf("%s\n",mock_strncpy(arr, arr1, a));
	return 0;
}

模拟strcat

#include<assert.h>
char* mock_strcat(char* pa1, const char* pa2)
{
	char* store = pa1;
	assert(pa1 != NULL);
	assert(pa2 != NULL);
	//或者assert(pa1 && pa2);
	while (*pa1 != '\0')//while(*pa1)也行,如果结果'0',ASCII=0;假
	{
		pa1++;
	}
	while (*pa1++ = *pa2++)
	{
	}
	return store;
}

int main()
{

	char arr[30] = "Hell world ";
	char arr1[] = "chenekg";

	printf("%s\n", mock_strcat(arr, arr1));

	return 0;
}

模拟strncat

#include<assert.h>
char* mock_strcat(char* pa1, const char* pa2,int i)
{
	char* store = pa1;
	assert(pa1 != NULL);
	assert(pa2 != NULL);
	//或者assert(pa1 && pa2);
	while (*pa1 != '\0')//while(*pa1)也行,如果结果'0',ASCII=0;假
	{
		pa1++;
	}
	while ( i && (* pa1++ = *pa2++))
	{
		i--;
	}
	/*if (i==0)
	{
		*(pa1++) = '\0';
	}*/

	return store;
}

int main()
{
	int i = 6;
	char arr[30] = "Hell world ";//自动填补\0
	char arr1[] = "chenekg";

	printf("%s\n", mock_strcat(arr, arr1,i));

	return 0;
}

模拟strcmp

int mock_strcmp(const char* pa1, const char* pa2)
{
	assert(pa1&&pa2);
	while (*pa1 == *pa2)
	{
		if (*pa1 == '\0')
		{
			return 0;
		}
		pa1++;
		pa2++;
	}
	return *pa1-*pa2;
}


int main()
{

	char arr1[] = "habc";
	char arr2[] = "habc";

	if (mock_strcmp(arr1, arr2)>0)
	{
		printf("arr1>arr2\n");
	}
	else if(mock_strcmp(arr1, arr2) <0)
	{
		printf("arr1<arr2\n");
	}
	else
	{
		printf("arr1=arr2\n");
	}


	return 0;
}

标准库函数(固定返回1,0,-1)

int mock_strcmp(const char* pa1, const char* pa2)
{
	int ret = 0;
	while (ret=*(unsigned char*)pa1-*(unsigned char*)pa2==0&&*pa2)
	{
		pa1++;
		pa2++;
	}
	return (ret > 0) - ((-ret) > 0);
}

模拟strcmp

基础上加个控制条件

模拟strstr

#include<assert.h>

char* mock_strstr(const char* pa1, const char* pa2)
{
	assert(pa1 && pa2);
	while (*pa1)
	{
		const char* pa3 = pa1;
		const char* pa4 = pa2;
		while (*pa3 && (*pa3 == *pa4))
		{
			pa3++;
			pa4++;
		}
		if (*pa4 == '\0') {
			return pa1;
			//如果我要返回pa3;应该写成:return (char*)pa3;//因为pa3是const char*;应该转成char*返回
		}
		pa1++;
	}
	return NULL;
}




int main()
{
	char arr1[] = "abcdabcdabcd";
	char arr2[] = "cdab";

	printf("%s\n",mock_strstr(arr1, arr2));

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡涂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值