手撕C语言中的string库中函数(模拟实现二)!

学习目标:

掌握string库中的基础函数


学习内容:

strcmp,strncpy, strncat,strstr函数的模拟实现!


一,strcmp函数的模拟实现!

strcmp函数是比较字符串的大小

#include <stdio.h>
int mycmp(const char* ch1, const char* ch2)		//不允许修改字符串
{
	while(*ch1==*ch2)							//当字符串内容相同,进入循环							
	{
		if(*ch1=='\0')							//*ch1==*ch2=='\0'说明2个字符串完全相等
		{
			return 0;							//返回 0
		}
		ch1++;									//当*ch1==*ch2!='\0',就要判断下一个字符
		ch2++;									
	}
	if(*ch1 > *ch2)								//某个字符的ASCLL值大于另一个值
	{	
		return 1;								//返回1
	}
	else
	{
		return -1;								//与上述同理 ,小于返回-1;
	}
}

int main()
{
	
	char ch1[20]="abc";				//定义字符串1
	char ch2[20]="abcdef";			//定义字符串2
	if(mycmp(ch1,ch2) > 0)			//调用函数,然后用函数的返回值与0比价
	{
		printf(">");
	}
	else if(mycmp(ch1,ch2) < 0)
	{
		printf("<");
	}
	else
	{
		printf("==");
	}
	return 0;
}

二,strncpy函数的模拟实现!

不同于strcpy,strncpy可以不限制字符串长度

#include <stdio.h>
#include <assert.h>
char* mystrncpy(char* ch1, const char* ch2,int m)
{
	char* ret = ch1;
	int i=0;
	while(*ch1!='\0' && i<m)				//由于用户输入的长度不确定,所以这里需要限制
	{
		*ch1 = *ch2;						//*ch2覆盖*ch1
		 ch1++;							
		 ch2++;							
		 i++;								
	}
	for(;i<=m;i++)							//如果输入的长度超出字符串长度则,则剩余的长度都为'\0'
	{
		*ch1='\0';
		 ch1++;
	}
	return ret;
}
int main()
{
	char ch1[20]="hello hello";
	char ch2[20]="world";
	mystrncpy(ch1,ch2,4);
	printf("%s",ch1);
	return 0;
}

三,strncat函数的模拟实现!

不同于strcat,strncat可以不限制字符串长度

#include <stdio.h>

void mystrncat(char* ch1,const char* ch2,int a)
{
	int i=0;
	while(*ch1!='\0')					//先让被追加的数组找到'\0';
	{
		ch1++;
	}
	while(*ch2 != '\0' && i<a)			//当有一方达到条件时停止
	{
		*ch1=*ch2;			
		 ch1++;
		 ch2++;
		 i++;
	}
	for(;i<=a;i++)						//补上'\0'标志字符串截止
	{
		*ch1='\0';
	}
}
int main()
{
	char ch1[20]="hello ";
	char ch2[20]="world";
	mystrncat(ch1,ch2,3);
	printf("%s",ch1);
	return 0;
}

用图形来解释这串代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值