zoukankan      html  css  js  c++  java
  • C语言

    一、strcmp和strncmp的编程实现及总结

       1、strcmp函数的实现
          要求:
             原型: int strcmp(char *dest,char * src,int n);    
               头文件:#include <string.h>
               功能:比较字符串s1和s2。
            说明:
                   返回值:当s1<s2时,返回值<0
                   返回值:当s1=s2时,返回值=0
                   返回值:当s1>s2时,返回值>0
     
          mystrcmp代码实现:
     int mystrcmp(const char *dest,const char *src)
      {  
           int i=0;
       //判断str1与str2指针是否为NULL,函数assert的头文件为#include<assert.h>
         assert(dest!=NULL && src !=NULL);  //[1]    
     
        //如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest  < source ,则返回值小于0。  
       while (*dest && *src && (*dest == *src)) 
       {    
         dest ++;  
         src ++; 
       }
       return *dest - *source; [2]
    }

      注意:

        代码[1]:很多人会忘记对字符串指针的检查,这一部分能体现程序员的严谨性,主要体现在一下三点,

               a、不检查指针的有效性,说明答题者不注重代码的健壮性 

               b、检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识  

               c、检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处

            代码1类似于下述代码:  if ((strDest == NULL)||(strSrc == NULL))  return -1;  

                  assert并不是抛出异常,而是判断是否出错
     

           代码[2]:为了优化代码,此代码中返回正数代表1,返回负数代表-1

      

        2、strncmp函数的实现
          要求:
              原型:extern int strcmp(char *s1,char * s2);    
              用法:#include <string.h>
                 功能:比较字符串s1和s2的前n个字符。
                 说明:
                     返回值:当s1<s2时,返回值<0
                     返回值:当s1=s2时,返回值=0
                     返回值:当s1>s2时,返回值>0 
     
         strncmp代码实现:
    int strncmp(const char *s1, const char *s2, size_t  len)
    {
       //判断str1与str2指针是否为NULL
         assert(s1!=NULL && s2 !=NULL);
    
        while(len--) 
       {
               if(*s1 == 0 || *s1 != *s2)
                   return *s1 - *s2;
             
               s1++;
               s2++;
          }
          return 0;
    }

        注意:注意事项同上,不过需要在上面的基础上添加一步 长度N的判断

  • 相关阅读:
    Kotlin技术入门以及和Java对比.md
    最新版Charles破解方法(Mac+Windows).md
    阿里移动云专场专题.md
    win10下 github+hexo搭建个人博客.md
    Java内存回收机制.md
    基于补偿的数据库分布式事务实践
    Log4J,在踩坑中升级版本
    关于服务注册与发现
    JVM内存模型-重排序&内存屏障
    GC初识
  • 原文地址:https://www.cnblogs.com/goul/p/9569550.html
Copyright © 2011-2022 走看看