字符函数模拟实现

#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<assert.h>
void my_strcpy1(char* des, char* start)
{
	while (*start!='\0')
	{
		*des = *start;
		start++;
		des++;
	}
	*des = '\0';
}
void my_strcpy2(char* des, char* start)
{
	while (*des++ = *start++);
}

char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest++ = *src++);
	return ret;
}
int main()
{
	char a[] = "abcdef";
	char b[20] = { 0 };
	//my_strcpy1(b, a);

	//my_strcpy2(b, a);

	my_strcpy(b,a);
	printf("%s\n", b);
	return 0;
}

#include<stdio.h>
#include<string.h>
//strcat 是字符串追加函数
char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	//dest指向'\0'
	while (*dest != '\0')
	{
		dest++;
	}
	// 拷贝字符串
	while (*dest++ = *src++);
	return ret;
}

int main()
{
	char a[20] = "hello ";
	//my_strcat(a, "world");
	//printf("%s\n", a);
	strcat(a,"world");
	printf("%s\n", a);

	return 0;
}

#include<stdio.h>
#include<assert.h>
 int my_strcmp(const char* p1,const  char* p2)
{
	 assert(p1 && p2);
	while (*p1 == *p2)
	{
		if (*p1 == '\0')
		{
			return 0;
		}
		p1++;
		p2++;
	}
	/*if (*p1 > *p2)
	{
		return 1;
	}
	else
	{
		return -1;
	}*/
	//关于上面if,else语句的简写
	return (*p1 - *p2);
}

//strcmp 模拟实现简化版
int my_strcmp(const char* p1, const char* p2)
{
	while (*p1++ == *p2++ && *p1 == '\0');
	return (*p1 - *p2);
 }
int main()
{
	char a[] = "azz";
	char b[] = "azz";
	int ret = my_strcmp(a, b);
	if (ret>0)
	{
		printf("a>b\n");

	}
	else if (ret < 0)
	{
		printf("a<b\n");
	}
	else
	{
		printf("a==b\n");
	}

	return 0;
}

#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1 = str1;
	const char* s2 = str2;
	const char* p = str1;

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

int main()
{
	char a[] = "babfcd";
	char b[] ="abcd";
	//gets(b);
	char* ret = strstr(a, b);
	//char* ret = my_strstr(a, b);//用来在一个字符串里寻找目标字符的函数(strstr)
	if (ret != NULL)
	{
		printf("%s\n", ret);

	}
	else
	{
		printf("子串不存在\n");
	}
	return 0;
}

#include<stdio.h>
#include<string.h>
int main()
{
	char a[] = "zhangsan@qq.com";
	char* p = "@.";//p 指向的是分割符,分隔符可以是一个也可以是多个
	char b[50];//因为strtok会把改变字符串,会一般修改都是用临时拷贝一份的字符串
	strcpy(b, a);
	//srtok函数可以把字符串,切割成多个部分,它会将字符串中的分割符改为 '\0',所以第二次调用的时候第一个参数变成了NULL
	// 在第一次调用时,该函数需要一个 C 字符串作为 str 的参数,其第一个字符用作扫描令牌的起始位置。
	// 在后续调用中,该函数需要一个空指针,并使用最后一个标记末尾的位置作为扫描的新起始位置。
	//char* ret = NULL;
	///*for (ret = strtok(b, p); ret != NULL; ret = strtok(NULL, p))
	//{
	//	printf("%s\n",ret);
	//}
	//*/
	char*ret = strtok(b, p);
	if (ret != NULL)
	{
		printf("%s\n", ret);
	}
	ret = strtok(NULL, p);
	if (ret != NULL)
	{
		printf("%s\n", ret);
	}
	ret = strtok(NULL, p);
	if (ret != NULL)
	{
		printf("%s\n", ret);
	}

// 输出结果如下
//	zhangsan
//	qq
//	com
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值