一、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=;
   //判断str1与str2指针是否为NULL,函数assert的头文件为#include<assert.h>
   assert(dest!=NULL && src !=NULL); //[]    //如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。
   while (*dest && *src && (*dest == *src))
   {   
     dest ++;
     src ++;
   }
   return *dest - *source; []
}

  注意:

    代码[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 == || *s1 != *s2)
  return *s1 - *s2;    s1++;
   s2++;
  }
  return ;
}

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

C语言 - strcmp和strncmp的编程实现及总结的更多相关文章

  1. C语言与VT100控制码编程

    C语言与VT100控制码编程 声明: . 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; . 本文在vim中编辑,请尽量是用vim进 ...

  2. 一个脚本和一个容易疏忽的问题strcmp、strncmp、memcmp的用法【原创】

    一个容易疏忽的问题: strcmp.strncmp.memcmp, 对于memcmp进行字符串比较时可能会出现内存重叠的情况 status = strncmp(xdev->product, &q ...

  3. R语言基于S4的面向对象编程

    前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系 ...

  4. Go语言面组合式向对象编程基础总结

    转自:http://blog.csdn.net/yue7603835/article/details/44282823 Go语言的面向对象编程简单而干净,通过非侵入式接口模型,否定了C/C++ Jav ...

  5. 字符串函数---strcmp()与strncmp()具体解释及实现

    一.strcmp()与strncmp() strcmp():strcmp(s1,s2);            比較两个字符串.        strncmp():strncmp(s1,s2);   ...

  6. strcmp与strncmp的区别

    ==================  strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串. strcmp C/C++函数,比较两个字符串  设这两个字符串为str1,s ...

  7. C语言控制台窗体图形界面编程(总结)

    本系列文章是笔者通过学习<C语言控制台窗体界面编程(修正版)>而写(关于此文档的很多其它信息请看本系列文章第一篇),旨在让大家更加清晰简洁easy地学习C语言控制台窗体界面的编程. 通过本 ...

  8. 字符串函数---strcmp()与strncmp()详解及实现【转】

    本文转载自:http://blog.csdn.net/lanzhihui_10086/article/details/39829623 一.strcmp()与strncmp() strcmp():st ...

  9. Python语言基础07-面向对象编程基础

    本文收录在Python从入门到精通系列文章系列 1. 了解面对对象编程 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编 ...

随机推荐

  1. 卸载mysql后再安装提示The service already exists!问题解决方法

    卸载mysql后再安装输入mysqld --install 回车后提示The service already exists! 原因:卸载的时候没有卸载干净 方法: 一.重新以管理员身份打开cmd 二. ...

  2. win10自带虚拟机的使用(Hyper-v)

    昨天刚发现的觉得特别好用,故推荐一下,跟VM虚拟机的使用方法是一样的 1.点击开始菜单中的<设置>图标,进入设置页码 2.点击<应用>图标,进入应用页码,并找到程序和功能 3. ...

  3. mysql连接数据库时报2003错误怎么解决

    mysql 2003是连接错误,连不上服务器. 你目前可以如下方法:进入控制面板->服务管理(我的是管理工具),->服务,然后找到Mysql服务,右键修改属性,改为自启动,以后再重启就没有 ...

  4. VMware Ubuntu18.04 安装及配置笔记

    安装Ubuntu 下载虚拟机VMware 下载镜像Ubuntu 过程略, 参考 https://zhuanlan.zhihu.com/p/38797088 Ubuntu配置 特别提示: 在Ubuntu ...

  5. 将Abp的UnitTest中的InMemory改为SQLite in memory

    添加nuget包 Microsoft.EntityFrameworkCore.Sqlite 添加ServiceCollectionRegistrarSqlite public static class ...

  6. 数据绑定-集合List绑定

    users.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  7. 02Spring基于xml的IOC配置--实例化Bean的三种方式

    maven依赖 <dependencies> <!--IOC相关依赖--> <dependency> <groupId>org.springframew ...

  8. 11 Python之初识函数

    ---恢复内容开始--- 1. 什么是函数? f(x) = x + 1 y = x + 1 函数是对功能或者动作的封装 2. 函数的语法和定义 def 函数名(): 函数体 调用: 函数名() 3. ...

  9. js特效背景--点线随着鼠标移动而改变

    https://blog.csdn.net/css33/article/details/89450852 https://www.cnblogs.com/qq597585136/p/7019755.h ...

  10. Linux——Session复制中的失败的可能原因之一

    组播地址问题 route add -net 224.0.0.0 netmask 240.0.0.0 dev eno16777728(自己的网卡名)