zoukankan      html  css  js  c++  java
  • 自己实现strcmp

    strcmp  C/C++函数,比较两个字符串

    函数原型 int strcmp(const char *s1,const char *s2);

    源码:

    int strcmp(const char *str1,const char *str2)
    {
        /*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,
        return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/
        while(*str1 == *str2)
        {
            if(*str1 == '')
                return0;
             
            str1++;
            str2++;
        }
        return *str1 - *str2;
    }

    我的实现:

    int mycmp(const char *s1,const char *s2)
    {
           
        while(*s1++==*s2++&&(*s1!=''))
        {
        }
           
        return *s1-*s2;
    } 

    但是这样会有很蛋疼的问题,在测试“adc ”和“abc”时没有问题,测试“abc”和“abc”就会出现问题

    也就是在s1>s2和s1<s2都没有问题,等于的时候就会出问题。

    经过观察,发现这应该是等于的时候前面s1和s2都已经使用过并且+1了,所以导致*s2的值向后移动了一位。

    当s1>s2和s1<s2时,他应该是只执行了*s1++==*s2不相等就跳出循环了,所以*s2的值是正确的。

    所以还是这个代码:

    int mycmp2(const char *s1,const char *s2)
    {
        while(*s1==*s2&&*s1!='')
        {
            s1++;
            s2++;
        }
        return *s1-*s2;
    }

    这样就避免出现这样的问题了

  • 相关阅读:
    使用指针的误区之指针未初始化
    实验室react项目名词解释
    生活感悟之大学
    git 快速入门
    口才锻炼
    narcissus
    crest value &minimum
    factorial
    Str_turn
    array_x
  • 原文地址:https://www.cnblogs.com/ZQQH/p/8144025.html
Copyright © 2011-2022 走看看