字符串(1)---strcpy,strncpy,strcat,strncat,strcmp,strncmp,strlen,strchr,strrchr实现

本文深入探讨了C语言中常见的字符串操作函数,包括strcpy、strncpy、strcat、strncat、strcmp、strncmp、strlen、strchr和strrchr的实现原理及使用方法。通过对这些函数的源代码解析,帮助读者理解其内部工作流程,提高编程技巧。

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

字符串(1)—strcpy,strncpy,strcat,strncat,strcmp,strncmp,strlen,strchr,strrchr实现

  • strlen:计算长度
int My_strlen (const char *src)
{
	assert(src!=NULL);
	int len=0;
	while(*src++!='\0')
	{
		len++;
	}
	return len;
}
  • strcmp && strncmp:字符串比较
int My_strcmp(const char *des,const char *src)
{
	assert(des!=NULL&&src!=NULL);
	int temp=0;
	while(*des==*src&&*src!='\0')
	{
		des++;
		src++;
	}
	if(*des > *src){temp=1;}
	else if(*des < *src){temp=-1;}
	else {temp=0;}
	return temp;
}

int My_strncmp(const char *des,const char *src,int n)
{
	assert(des!=NULL&&src!=NULL);
	if(n<=0){return false;}
	while(*des==*src && *src!='\0'&&--n!=0)
	{
		des++;
		src++;
	}
	int a=*des-*src;
	if(a>0){a=1;}
	else if(a<0){a=-1;}
	else{a=0;}
	return a;
}
  • strcat && strncat:字符串追加
char *My_strcat(char *des,const char *src)
{
	assert(des!=NULL&&src!=NULL);
	char *p=des;
	while(*des!='\0'){des++;}
	while((*des++=*src++) !='\0'){}
	return p;
} 

char *My_strncat(char *des,const char *src,int n)
{
	assert(des!=NULL&&src!=NULL);
	char *p=des;
	while(*des!='\0'){des++;}
	for(int i=0;i<n&&src[i]!='\0';i++)
	{*des++=src[i];}
	*des='\0';
	return p;
}
  • strcpy && strncpy 字符串复制
char *My_strcnpy(char* des,const char* src,int n)
{
	assert(des!=NULL&&src!=NULL);
	char * p =des;
	int i=0;
	for( i=0;i<n && src[i]!='\0';i++)
	{
		des[i]=src[i];
	}
	des[i]='\0';
	return p;
}

char *My_strcpy(char *des,const char *src)
{
	assert(des!=NULL&&src!=NULL);
	char *p=des;
	while(*src !='\0'){*des++=*src++;}
	*des='\0';
	return p;
}
  • strchr && strrchr
char * my_strchr( char  * str,char ch)//找到第一个字符ch的位置
{
	assert(str!=NULL);
	while(*str!='\0')
	{
		if(*str==ch)
		{
			return str;
		}
		str++;
	}
	return NULL;
}
char *my_strrchr(char*str,char ch)//找到最后一个字符ch的位置
{
	assert(str != NULL);
	char * now = my_strchr(str,ch);
	char *last=NULL;
	while( now != NULL)
	{
		last=now;
		now=my_strchr(now+1,ch);
	}
	return last;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值