动手写C库——strcmp()

计划通过编写C语言常见的库函数练习C语言基本功。

 每写一个函数都包括三个过程:

1. 通过Linux man命令查看库函数的描述,重点是入参和返回值;

2. 自己不参考任何内容实现库函数的功能;

3. 对比glibc里库函数的实现,做总结;

1. strcmp()形式如下:    int strcmp(const char *s1, const char *s2)

2. 我的实现:

/*
1. 从左往右依次比较每个字符,如果相等继续比较下一个字符,如果不等立刻返回 s1的字符减去s2的字符
2. 以s1出现字符串结束符为循环退出条件
*/
int strcmp7(const char *s1, const char *s2)
{
	//需要判断字符串结束符,否则指针加加会越界
	while (*s1 != '\0')
	{
		if (*s1 == *s2)
		{
			s1++;
			s2++;
		}
		else
		{
			return (*s1 - *s2);				
		}
	}

	return (*s1 - *s2);	
}
3. glibc的实现:
int
STRCMP (const char *p1, const char *p2)
{
  const unsigned char *s1 = (const unsigned char *) p1;
  const unsigned char *s2 = (const unsigned char *) p2;
  unsigned char c1, c2;

  do
    {
      c1 = (unsigned char) *s1++;
      c2 = (unsigned char) *s2++;
      if (c1 == '\0')
	return c1 - c2;
    }
  while (c1 == c2);

  return c1 - c2;
}
我认为两个函数只是循环退出的条件不同,其他地方没有实质性的区别。两个函数都做了初步测试,没发现问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值