实现str函数

所有函数都实现了 ,在需要时解放部分屏蔽就好

char* strcat(char* dst, char* src);
 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
  返回指向dest的指针。

#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "windows.h"
#include "string.h"
#include "assert.h"
#define  OK     1
#define  ERROR  0
char* My_strcat(char* dst, char* src)
{
	assert(dst && src);
	//char* start = dst;//记录提分地址
	while (*++dst);//先让dst到达末尾
	do
	{
		*dst++ = *src++;
	} while (*src);
	return dst;//因为我们帮不需要返回的地址,所以这里返回什么都可以
}
char* My_strchr(char* dst, const char ch)
{
	while (*dst )
	{
		if( *dst == ch)
		return  dst;
		dst++;
	}
	return NULL;//不存在返回空指针
}
int  My_strcmp(const char* dst,const char* src)
{
	assert(dst && src);
    do{ 
	
		int ret = *dst - *src;
			{
				if (ret < 0)
					return -1;
				else if (ret > 0)
					return 1;
				else
					return 0;
			}
	}while (*dst && *src);
	{
	   if (!*dst)
			return -1;
	   if (!*src)
			return 1;
	}
}
int My_strcmp2(char* dst, const char* src)
{
	assert(dst && src);
	while (*dst++ && *src++)
	{
		return *dst - *src;

	}if (!*dst)
		return -1;
	 if (!*src)
		return 1;
	return 0;
}
void * My_memcpy(void*dst,void*src,int num)
{
	assert(src);
	char* p1 = (char*)dst;
	char* p2 = (char*)src;
	while(num--)
	{
		*p1++ = *p2++;//就算*src为空也要复制
	}
	*p1 = '\0';//内存操作程序员自己要在结尾加NUL
	return dst;

}
void* My_memmove( void*dst,  void*src, int num)
{
	assert(dst &&src);
	char* p1 = dst; char* p2 = src;
	if (p1<p2 &&  p1 + num>p2)//前重叠
		while (num--)
		{
			*p1++ = *p2++;
		}
	else //否则都按后重叠复制
		 //(p1 > p2 && p1 < p2 + num)//   后重叠,
		while (num)
		{
			p1[num--] = p2[num];
		}
	return dst;
}
int main(void)
{
	char ch;
	char p[100] = "i'm a good boy";
	char a[40] = "Hello,";//要保证目标串足够长
	My_strcat(a, p);
	printf("连接后的串为:%s\n", a);
	printf("请输入要查找的字符,输入’#‘退出查找\n");
	//ch = getchar();
	/*if (ch != '#')
	{
		char *p1 = My_strchr(p, ch);
		if (p1)
			printf("存在%s\n", p1);
		else
			printf("不存在\n");
	}*/
	//int ret = My_strcmp(p, a);
	//switch (ret)//我就想用switch  case//其实并不提倡这里这样用
	//{
	//case 0:
	//	printf("一样大\n"); break;
	//case 1:
	//	printf("p大\n"); break;
	//case -1:
	//	printf("a大\n"); break;
	//default:
	//	break;	
	//}
	/*int ret2 = My_strcmp(p,a);
	if (ret2 == 0)
		printf("一样大\n");
	else if (ret2 < 0)
		printf("a大\n");
	else if (ret2 > 0)
		printf("p大\n");*/
	//My_memcpy(p,a,10);
	//printf("%s\n", p);
	My_memmove(p,p+10,2);
	printf("%s\n", p);
	system("pause");
		return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值