• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言-strcmp和strncmp的编程实现及总结

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、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的判断


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
数据结构C++模板实现之----------------单向链表发布时间:2022-07-13
下一篇:
C#-MFC发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap