各种字符串函数的自我实现

1:strlen函数

2:strcpy函数

3:strcat函数

4:strcmp函数

5:strstr函数

6:strerror函数

7:memcpy函数

8:memmove函数

9:   memcmp函数

首先,我们先解释下每个函数的用法,然后怎么模拟实现每个函数

strlen函数,试求字符串长度的一个函数,以\0为结速标志的函数,遇到\0就停止的函数,所以我们怎么去写这个函数,其实很简单,只要只要给一个字符串的起始地址,然后地址递加,知道遇到\0结束,然后就可以输出字符串大小,程序如下:

int my_strlen(char* p1)
{
	int count=0;
	while (*p1++)
	{
		count++;
	}
	return count;
}
int main()
{
	int sz = 0;
	char ch[] = "abcdefgh";
	sz=my_strlen(ch);
	printf("%d\n", sz);
	return 0;
}

 2:strcpy函数,从英文的字面意思就是字符串拷贝,其实好像也就是这个意思,

首先我们看看这个函数怎么用:

从源代码形参和返回类型我们可以看出,都是char *类型,所以我们在模拟实现这个函数的时候,也应该去参考这种类型,这个函数的作用就是,把源地址的字符串,拷贝到目的地字符串当中,同样的我们改如何实现这个函数呢?你想想,好了,程序如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
char * my_strcpy(char* dest, char* src)
{
	char*ret = dest;
	assert(dest&&src);
	while (*src)
	{
		*dest = *src;
		src++;
		dest++;
	}
	return ret;
}
int main()
{
	char ch1[8] = "abcdefg";
	char ch2[4] = "def";
	my_strcpy(ch1, ch2);
	printf("%s", ch1);
	return 0;
}

 

 3:strcat函数,此函数是给目的地函数往后追加字符串的,但有几点必须要注意到,第一,源字符串必须以‘\0'结束,第二,目标空间必须足够大,能容纳下源字符串的内容。第三,目标空间必须可修改。同样的,我们看下此函数在源代码中怎么使用,

所以参考以上内容,程序如下:

char* void my_strcat(char *p1, char* p2)
{
    char *tet=p1;
	int sz1 = 0;
	int sz2 = 0;
	sz1 = strlen(p1);
	sz2 = strlen(p2);
	char* p3 = p1 + sz1 ;
	while (*p2++)
	{
		*p3 = *p2;
		p3++;
	}
return ret;
}
int main()
{
	char ch1[10] = "abcdef";
	char ch2[4] = "ghi";
	my_strcat(ch1, ch2);
	printf("%s", ch1);
	return 0;
}

 4:strcmp函数,此函数的作用是比较字符串是不是相等的,但它的返回值是int,它的规则是,第一个字符串大于第二个字符串,则返回大于零的数字,如果第一个字符串等于第二个字符串,则返回零,如果第一个字符串小于第二个字符串,则返回小于零的数字,所以,如何模拟实现呢?

好了程序如下:

int my_strcmp(char *p1, char *p2)
{
	assert(p1&&p2);
	while (*p1&&*p2)
	{
		if (*p1 == *p2)
		{
			p1++;
			p2++;
		}
		else if (*p1 > *p2)
		{
			return 1;
		}
		else
			return - 1;
	}
	return 0;
}
int main()
{
	int ret = 0;
	char ch1[] = "abcdef";
	char ch2[] = "abcdef";
	ret = my_strcmp(ch1, ch2);
	printf("%d\n", ret);
	return 0;
}

 先介绍这么多,剩下的下次在介绍

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值