网上搜到了一个库函数strcmp( )源代码:

int strcmp (const char * src, const char * dst)
{int ret = 0 ;while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)++src, ++dst;  if ( ret < 0 )ret = -1 ;else if ( ret > 0 )ret = 1 ;return( ret );
}

我初步自己写的是:

int strcmp(char const *s1, char const *s2)
{int i = 0;while(1) {if(s1[i] == '\0' && s2[i] == '\0')return 0;else if(s1[i] > s2[i])return 1;else if(s1[i] < s2[i])return -1;i++;}
} 

然后再精简一下是:

int strcmp(char const *s1, char const *s2)
{int ret, i = 0;while(1) {ret = s1[i] - s2[i];if(ret || !s1[i] || !s2[i])return ret;i++;}
} 

继续精简:

int strcmp(char const *s1, char const *s2)
{int ret, i = 0;while(1) {ret = s1[i] - s2[i];if(ret || !s1[i])//只要字符串中有一个遇到\0,ret就不为零了 return ret;i++;}
} 

但如果传入指针为NULL,则会崩溃,改进如下:

int strcmp(char const *s1, char const *s2)
{int ret, i = 0;if( !s1 || !s2)return s1 - s2;while(1) {ret = s1[i] - s2[i];if(ret || !s1[i])//只要字符串中有一个遇到\0,ret就不为零了 return ret;i++;}
} 

欢迎大家评头论足

自己写strcmp( )函数相关推荐

  1. 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s

    题目描述: 编写一个C程序,实现以下功能: 用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为: int strcmp(char *p1,char *p2); 设p1指向字符串s ...

  2. 自己写一个strcmp函数(C++)

    题目说明: 写一个函数,实现两个字符串的比较.即自己写一个strcmp函数,函数原型为int strcmp( char * p1, char * p2); 设p1指向字符串s1,p2指向字符串s2.要 ...

  3. 写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为int strcmp(char * p1 ,char * p2); 设p1指向字符串s1, p2指向字符串s2。要求当s1=s2

    写一函数,实现两个字符串的比较.即自己写一个strcmp函数,函数原型为int strcmp(char * p1 ,char * p2); 设p1指向字符串s1, p2指向字符串s2.要求当s1=s2 ...

  4. 用指针写出strcmp函数

    题目:用指针写出strcmp函数. 思考:此题目和用指针写出strcpy函数一样.使用递归的思想,函数功能就是当s1和s2相等时,函数返回值为0,如果s1>s2时,函数返回值为正整数,s1< ...

  5. (C语言)写一个函数,实现两个字符串的比较, 即自己写一个strcmp函数,函数原型为int strcmp(const char* p1, const char* p2)

    写一个函数,实现两个字符串的比较, 即自己写一个strcmp函数,函数原型为int strcmp(const char* p1, const char* p2);设p1指向字符串s1,p2指向字符串s ...

  6. C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

    题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...

  7. strcmp函数实现及分析

    增加linux内核部分代码参考,见文章尾部: 最近看C,看到strcmp函数,对它的实现原型不很清楚,于是到网上搜.网上算法一大堆,看了很多代码后自己做了一下总结 strcmp函数是C/C++中基本的 ...

  8. strcmp函数的说明和使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.strcmp函数的头文件 二.strcmp函数的使用方法 1.strcmp函数的使用对象 2.strcmp函数的使 ...

  9. C语言使用strcmp()函数对两个汉字字符进行比较

    C语言使用strcmp()函数对两个汉字字符进行比较 最近写了个代码,发现关于使用strcmp()函数比较两个汉字字符串出现错误,现做以下改正: 源代码: #include<stdio.h> ...

最新文章

  1. 什么是CNN卷积神经网络的感受野及动画演示
  2. mongodb默认的用户名密码_MongoDB 设置账号和密码
  3. How to write an operating system
  4. 为什么视频压缩如此重要
  5. SAP系统里的订单,可以随便删除么?
  6. LeetCode 1250. 检查「好数组」(set / 最大公约数)
  7. sql语句变量定义和样例
  8. cleanmymac X 4.7.3更新(支持M1芯片)
  9. python协程与多线程比较_python-协程、多线程、多进程性能比较
  10. javascript 阻止冒泡和浏览器的默认行为
  11. Python字符串有关的方法汇总
  12. 系统策略禁止安装此设备。请与系统管理员联系-解决方案
  13. iOS开发之观察者模式
  14. 极客日报:阿里回应1000万成立“元境生生”;马斯克一年上了75次热搜;微软.NET中文官网正式上线
  15. elasticsearch数据迁移
  16. 数学建模:整数规划示例模型 (Python 求解)
  17. Cannot access memory at adress 0xbf9
  18. php 导出excel删除空行,将Excel数据写入Word模板并删除多余的空行
  19. npm 创建第一个Angular项目
  20. 是计算机程序设计语言的是,计算机设计语言

热门文章

  1. Linux 数据可视化工具
  2. python3.8安装mayavi4.7.3
  3. potplayer播放器实现人声增强
  4. 计算机网络-CSMA/CD协议
  5. Echarts画散点图
  6. PS188——谱瑞(Parade)推动的 Type-C扩展坞红海战略
  7. read_csv()报错: 'utf-8' codec can't decode byte 0xca in position 0: invalid continuation byte最新解决办法
  8. vue打印问题(分页打印、批量打印条形码)
  9. 基于“业务中台”构建的一些理解
  10. PHP解码JavaScript中的escape()方法