【C语言】实现strcat,strncat,strcpy,strncpy,strcmp,strncmp函数

本文提供了一系列C语言中字符串操作的自定义实现,包括字符串连接、复制、比较等功能,并通过实例展示了这些函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <string.h>
#include <assert.h>

char Mystrcat(char *des,const char *src)//字符串的链接
{

	char *p = des;
	while(*des != '\0')//找尾巴
	{
		des++;
	}
	while(*des++ = *src++);//复制

	return *p;
}

char Mystrncat(char *des,const char *src,size_t n)//n个字符串的链接
{
	assert(*src != NULL && *des != NULL);
	char *p = des;
	
	while(*des != '\0')
	{
		des++;
	}

	size_t i;
	for(i = 0;i < n&&src[i]!='\0';i++)
	{
		des[i] = src[i];
	}
	des[i] = '\0';

	return *p;
}

int Mystrcpy(char *des,const char *src)//字符的复制
{
	char *p = des;
/*	while(*src != '\0')
	{
		*des++ = *src++;
	}
	*des = '\0';    */

	while(*des++ = *src++);   //与上面等同

	return *p;
}

void Mystrncpy(char *des,const char *src,size_t n)//n个字符的复制
{
	size_t i;
	for(i = 0;i < n && src[i]!='\0';i++)
	{
		des[i] = src[i];
	}
	if(i > n)
	{
		des[i++] = '\0';
	}
	des[i] = '\0';
}

int Mystrcmp(const char *str1,const char *str2)//字符大小的比较
{
	assert(*str1 != NULL && *str2 != NULL);
	while(*str1 == *str2 )
	{
		*str1++;
		*str2++;
	}
	if(*str1>*str2)
		{
			return 1;
		}
		if(*str1<*str2)
		{
			return -1;
		}
}

int Mystrncmp(const char *str1,const char *str2,size_t n)//n个字符的比较
{
	assert(*str1 != NULL && *str2 != NULL);

	while((*str1 == *str2) && (n--))
	{
		*str1++;
		*str2++;
	}
	if(*str1>*str2)
		{
			return 1;
		}
		if(*str1<*str2)
		{
			return -1;
		}
}


int main()
{
	char str1[100] = "abc";
	Mystrcat(str1,"def");
	printf("%s\n",str1);

	char str2[100] = "abc";
	Mystrncat(str2,"def",2);
	printf("%s\n",str2);

	char str3[100];
	char str4[100] = "abc";
	Mystrcpy(str3,str4);
	printf("%s\n",str3);

	char str5[100];
	char str6[] = "abcde";  
	Mystrncpy(str5,str6,3);
	printf("%s\n",str5);

	char str7[] = "abb";
	char str8[] = "abc";
	printf("%d\n",Mystrcmp(str7,str8));

	char str9[] = "abcd";
	char str10[] = "abcc";
	size_t n = 4;
	printf("%d\n",Mystrncmp(str9,str10,n));

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值