1.实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ADream__/article/details/84110092

1.模拟实现strcpy函数拷贝字符串

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

}
int main()
{
char arr1[10] = “abcdef”;
char arr2[10] = {0};
printf("%s\n",my_strcpy(arr2,arr1));
return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2.模拟实现strcat函数连接字符串

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* arr1,const char* arr2)
{
	char *ret = arr1;
	assert(arr1 != NULL);
	assert(arr2 != NULL);
	while(*arr1 != '\0')
	{
		*arr1++;
	}
	while(*arr1++ = *arr2++)
	{
		;
	}
	return ret;

}
int main()
{
char arr1[20] = “hello”;
char arr2[20] = " bit";
printf("%s\n",my_strcat(arr1,arr2));
return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3.模拟实现strstr查找字符串

#include<stdio.h>
#include<assert.h>
char* my_strstr(const char*str1,const char*str2)
{
	const char *s1 = str1;
	const char *s2 = str2;
    const char *cp = str1;
	assert(str1 != NULL);
	assert(str2 != NULL);
if(*str2 == '\0')
	return (char*)str1;

while(*cp)
{
	s1 = cp;
	s2 = str2;
	
    while(*s1 &amp;&amp; *s2 &amp;&amp; *s1 == *s2)
	{
		s1++;
		s2++;
	}
	if(*s2 == '\0')
		return (char *)cp;
	cp++;
}
return NULL;

}
int main()
{
char *p1 = “bbc”;
char *p2 = “abbcdef”;
char *ret = my_strstr(p2,p1);
printf("%s\n",ret);
return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

4.模拟实现strchr,含义是查找字符串s中首次出现c的位置。

#include<stdio.h>
char* my_strchr(char* s,char c)
{
	while(*s != '\0' && *s != 'c')
	{
		s++;
	}
	return *s == c?s:NULL;
}
int main()
{
	char* arr = "abcdefg";
int ret = my_strchr(arr,'c');
printf("%s\n",ret);
return 0;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5.模拟实现strcmp函数比较两个字符串的大小

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1,const char* str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);
   while(*str1 == *str2)
   {
	   if(*str1 == '\0')
	   {
		   return 0;
	   }
	   str1++;
	   str2++;
   }
   return *str1 - *str2;
}
int main()
{
	int ret = my_strcmp("abcdef","abc");
	printf("%d",ret);
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

6.模拟实现memcpy拷贝内存
拷贝的是字节数

#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest,void* src ,int count)
{
	void* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
while(count--)
{
	*(char*)dest = *(char*)src;
	((char*)dest)++;
	((char*)src)++;
}
return ret;

}
int main()
{
int arr1[] = {1,2,3,4,5,6};
int arr2[20] = {0};
my_memcpy(arr2,arr1,12);
return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

7.实现memmove在一个内存中进行拷贝

#include<stdio.h>
#include<assert.h>
void* my_memmove(void* dest,void* src,int count)
{
	void* ret = dest;
	assert(dest);
	assert(src);
    if(dest<src)
    {
		while(count--)
	   {
		   *((char*) dest) =*((char*) src);
		   ((char*) dest)++;
		   ((char*) src)++;
	    }
	}
	else
	{
		while(count--)
		{
			*((char*) dest+count) = *((char*) src+count);
		}
	}
	return ret;

}
int main()
{
int arr1[] = {1,2,3,4,5,6,7};
my_memmove(arr1,arr1+2,16);
return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e9f16cbbc2.css" rel="stylesheet">
                </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值