• strcmp 源代码 实现


    本文出自 http://k678k678.f01.data023.com/  转载请注明,谢谢!

    //自己写的代码

    int my_strcmp(const char * str1, const char * str2 )
    {

    while( (*str1) && (*str2))
    {
    if( *str1 - *str2 > 0 )
    return 1;
    else if( *str1 - *str2 < 0 )
    return -1;

    ++str1;
    ++str2;
    }

    if( (*str1 == 0) && (*str2 == 0) )
    return 0;
    else if( *str1 == 0 )
    return -1;
    else
    return 1;
    }

    //microsoft 源代码

    int __cdecl strcmp (
      const char * src,
      const char * dst
      )
      {
      int ret = 0 ;
      while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
      ++src, ++dst;
      if ( ret < 0 )
      ret = -1 ;
      else if ( ret > 0 )
      ret = 1 ;
      return( ret );
      }

    自己写的比microsoft的稍微复杂一点 ,源于基础知识的不扎实

    while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)

    运算是从左到右的,所以会先运算减法,就算*dst 或者*src为0 (字符串结束了)也可以得到ret的

    这里对 src 以及 dst进行了 unsinged char * 强制转换,并不是很理解.........

  • 相关阅读:
    数据库
    Activity组件
    view,视图组件
    360导航板式
    service音乐播放
    service
    音乐播放器组件
    获取时间字符串
    JDK服务器存储
    数据库_黑名单练习_完善服务广播
  • 原文地址:https://www.cnblogs.com/rollrock/p/2751141.html
Copyright © 2020-2023  润新知