zoukankan      html  css  js  c++  java
  • 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 * 强制转换,并不是很理解.........

  • 相关阅读:
    JVM系列-001-JVM监控工具
    Java8-CompletableFuture
    Java8-ConcurrentUtils
    Java8-LongAccumulator
    Java8-Atomic
    Java8-ConcurrentHashMap
    Java8-Synchronized-No.02
    Java8-Synchronized-No.01
    Java8-Executors-No.03
    Java8-Executors-No.02
  • 原文地址:https://www.cnblogs.com/rollrock/p/2751141.html
Copyright © 2011-2022 走看看