【C语言】模拟实现strlen函数和strcpy函数

一、模拟实现strlen函数

方法1:遍历字符串,用计数器算出字符串长度

#include<stdio.h>
//第一种:计数器法
int my_strlen(char* p)
{
    assert(p!=NULL)//用宏来判断一下,若括号中为假则会报错,这部可省略
	int count = 0;
	while (*p!='\0')
	{
		count++;
		p++;
	}
	return count;
}

int main()
{
	char arr[256];
	printf("请输入要计算的字符串:");
	gets(arr);
	int len=my_strlen(arr);
	printf("字符串长度为:%d", len);
}

方法2:递归计算字符串长度 

#include<stdio.h>

int my_strlen(char* p)
{
	if (*p == '\0')
		return 0;
	else
		return 1 + my_strlen(p + 1);//递归调用my_strlen
}

int main()
{
	char arr[256];
	printf("请输入要计算的字符串:");
	gets(arr);
	int len = my_strlen(arr);
	printf("字符串长度为:%d", len);
}

方法3:指针-指针

#include<stdio.h>
// 指针 - 指针差值的绝对值 = 指针和指针之间的元素个数
//指针-指针的前提条件是:两个指针指向同一块区域,指针类型是相同的
int my_strlen(char* p)
{
	char* start = p;
	while (*p != '\0')
		p++;
	return p - start;
}

int main()
{
	char arr[256];
	printf("请输入要计算的字符串:");
	gets(arr);
	int len = my_strlen(arr);
	printf("字符串长度为:%d", len);
}

运行结果:

二、模拟实现strcpy函数 

这是strcpy函数的功能,是将source中的数据复制到destination中,为了防止source中的数据被改变加上了const来修饰,注意:(1)destination的长度要大于source的长度(2)source中的‘\0’也会被复制过去

方法1:一个一个字符复制过去

#include<stdio.h>
void my_strcpy(char* dest, char* src)
{
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;//将'\0'复制过去
}

int main()
{
	char arr1[20] = "xxxxxxxxxxxxxx";
	char arr2[] = "hello world";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
}

方法2: 简化方法1

#include<stdio.h>
//此方法直接将'\0'复制过去,不用再单独复制
void my_strcpy(char* dest, char* src)
{
	while (*dest++=*src++)
	{
		;
	}
	
}

int main()
{
	char arr1[20] = "xxxxxxxxxxxxxx";
	char arr2[] = "hello world";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
}

方法三:严格按照原strcpy模拟实现 

#include<stdio.h>
char * my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "xxxxxxxxxxxxxx";
	char arr2[] = "hello world";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
}

运行结果:

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值