strcmp函数的两种实现,gcc测试通过。

一种实现:

C代码  
  1. #include<stdio.h>
  2. int strcmp(const char *str1,const char *str2)
  3. {
  4. /* 注释以下的五行(while循环)可以简写为:
  5. * for(;(*str1==*str2)&&*str1!='\0';str1++,str2++);
  6. *  */
  7. while((*str1==*str2)&&*str1!='\0')
  8. {
  9. str1++;
  10. str2++;
  11. }
  12. if(*str1=='\0'&&*str2=='\0') return 1;
  13. else return -1;
  14. }
  15. int main()
  16. {
  17. char *st1="abdefg";
  18. char *st2="abcdefg";
  19. printf("%d\n",strcmp(st1,st2));
  20. char *st3="12345";
  21. char *st4="12345";
  22. printf("%d\n",strcmp(st3,st4));
  23. return 0;
  24. }

另一种实现:

C代码  
  1. #include<stdio.h>
  2. int strcmp(const char *str1,const char *str2)
  3. {
  4. while(str1!=NULL&&str2!=NULL)
  5. {
  6. while(*str1++==*str2++)
  7. {
  8. if(*str1=='\0'&&*str2=='\0') return 1;
  9. }
  10. return -1; //不等的情况
  11. }
  12. return -2; //有指针为空的情况
  13. }
  14. int main()
  15. {
  16. char *st1="abdefg";
  17. char *st2="abcdefg";
  18. printf("%d\n",strcmp(st1,st2));
  19. char *st3="12345";
  20. char *st4="12345";
  21. printf("%d\n",strcmp(st3,st4));
  22. char *st5="xyz",*st6=NULL;
  23. printf("%d\n",strcmp(st5,st6));
  24. return 0;
  25. }

strcmp函数的两种实现的更多相关文章

  1. (查找函数+atoi)判断与(注册函数+strcmp函数)判断两种方法

    loadrunner中接口判断的2中方法    如下: 1. ●查找函数web_reg_find() ● atoi():将字符串转换为整型值 作比较  > 0 Action() { //检查点函 ...

  2. JavaScript 函数的两种声明方式

    1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...

  3. C模块回调Lua函数的两种方法

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...

  4. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  5. 【转】DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport):另外一种方式是:采用模块定义 ...

  6. dll导出函数的两种方式的比较

    最初的网页链接已经挂了, 在此贴一个中间的转载链接 https://blog.csdn.net/zhazhiqiang/article/details/51577523 一 概要 vs中导出 dll的 ...

  7. DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接 ...

  8. DLL声明导出函数的两种方式

    DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport):另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出.属 ...

  9. getline()函数的两种用法

    getline()函数的输入流对象可以是标准输入流对象cin,也可以是一个文件输入流对象fin; (1)输入流对象的成员函数(有三个参数,一般除非需要自己选定停止符,并不推荐使用): basic_is ...

随机推荐

  1. vue 实例化使用模板

    var vm = new Vue({ el:"", data:{ }, methods:{ } })

  2. centos 7 vscode cmake 编译c++工程

    一.环境说明 1)gcc/g++  cmake安装建议 gcc/g++内核自带的即可,如果需要新的自行安装, cmake也一样,如有需要新的版本自行安装. 2)vscode安装插件 必要的插件c/c+ ...

  3. SpringBoot整合SpringSecurity实现JWT认证

    目录 前言 目录 1.创建SpringBoot工程 2.导入SpringSecurity与JWT的相关依赖 3.定义SpringSecurity需要的基础处理类 4. 构建JWT token工具类 5 ...

  4. MySQL递归查询

    MySQL8.0已经支持CTE递归查询,举例说明 CREATE TABLE EMP (EMPNO integer NOT NULL, ENAME ), JOB ), MGR integer, HIRE ...

  5. 通道(Channel)的原理与获取

    通道(Channel):由 java.nio.channels 包定义 的.Channel 表示 IO 源与目标打开的连接. Channel 类似于传统的“流”.只不过 Channel 本身不能直接访 ...

  6. java方式实现选择排序

    一.基本思想 每一趟找到未排序序列的最小(大)值,把它存放在已排序序列末尾,直到把所有的数据排序完,即是第k趟找到剩余未排序数据的最小(大)值,然后把这个最小(大)值存放在数组的第k(k=1,2... ...

  7. Unity 游戏框架搭建 2019 (五十六/五十七) 需求分析-架构中最重要的一环&从 EmptyGO 到 Manager Of Managers

    我们的项目开始立项的时候,最常见的一个情况就是:几个人的小团队,一开始什么也不做,就开始写代码,验证逻辑,游戏就开始写起来了.而公司的一些所谓的领导层面一开始就把游戏定义为我们要做一个大作.这个事情本 ...

  8. 深入理解JS:var、let、const的异同

    目录 序言 var 与 let 的区别 作用域 重复声明 绑定全局对象 变量提升与暂存死区 let 与 const 异同 参考 1.序言 var.let 和 const 都是 JavaScript 中 ...

  9. Java实现 蓝桥杯 算法提高 天天向上(DP)

    试题 算法提高 天天向上 问题描述 A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花."可是这对于A同学太困难了.于是,老师对他放宽 ...

  10. Java实现 蓝桥杯 算法训练 数据交换

    试题 算法训练 数据交换 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值. ...