模拟实现 strcmp(字符串比较) --浅谈C语言

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

C 库函数 - strcmp()

描述

C 库函数 int strcmp(const char *str1, const char *str2)str1 所指向的字符串和 str2 所指向的字符串进行比较。
声明

下面是 strcmp() 函数的声明。
  1. int strcmp(const char *str1, const char *str2)
复制代码
参数


  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。
返回值

该函数返回值如下:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。
模拟实现

比较方式,依次比较ascii大小,大返回正数,小于返回负数,等于则比较下一位。若全都相等则返回0;
1.0

my_strcmp 1.0 版本
  1. #include<stdio.h>
  2. #include<assert.h>
  3. int my_strcmp(const char*str1, const char*str2)
  4. {
  5.     assert(str1&&str2);
  6.     //依次比较ascii大小
  7.     while (*str1 == *str2)
  8.     {
  9.                     //相等且都为'\0'
  10.         if (str1 == '\0')
  11.         {
  12.             return 0;
  13.         }
  14.         str1++;
  15.         str2++;
  16.     }
  17.     return(*str1 - *str2);
  18. }
  19. int main()  
  20. {
  21.     char* str1 = "aaaa";
  22.     char* str2 = "bbbb";
  23.     int ret = my_strcmp(str1, str2);
  24.     printf("%d\n", ret);
  25.     return 0;
  26. }
复制代码
2.0
  1. #include<stdio.h>
  2. #include<assert.h>
  3. int my_strcmp (const char * src, const char * dst)
  4. {
  5.        int ret = 0 ;
  6.         assert(src != NULL);
  7.        assert(dest != NULL);
  8.        //以字符类型(以字节为单位)进行整型计算
  9.        while( *dst && *src && !(ret = *(unsigned char *)src - *(unsigned char *)dst) )
  10.                ++src, ++dst;
  11.                
  12.        if ( ret < 0 )
  13.                ret = -1 ;
  14.        else if ( ret > 0 )
  15.                ret = 1 ;
  16.        return( ret );
  17. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表