本文转载自:http://blog.csdn.net/lanzhihui_10086/article/details/39829623

一、strcmp()与strncmp()

strcmp():strcmp(s1,s2);            比较两个字符串。
       strncmp():strncmp(s1,s2);       比较两个字符串前n位

比较规则:从左到右逐个字符进行比较(ASCII值),直到出现不同的字符或遇到'\0'为止。
       如果全部的字符相同,则认为两字符串相等,返回值为0;
       如果出现不同的字符,则对第一次出现不同的字符进行比较,比较方法是以s1的第一个不同的字符减去s2的第一个不同的字符,以所得差值作为返回值(大于0,则返回1,小于0则返回-1)。

代码实例:

  1. #include<iostream>
  2. #include<assert.h>
  3. using namespace std;
  4. int main()
  5. {
  6. char a[]="aaaae";
  7. char b[]="aaaaf";
  8. int i=strcmp(a,b);
  9. cout<<i<<endl;
  10. int j=strncmp(a,b,4);//只比较前n个字符
  11. cout<<j<<endl;
  12. system("pause");
  13. return 0;
  14. }

运行结果为 -1,0;

二、strcmp()与strncmp()的具体实现

  1. #include<iostream>
  2. #include<assert.h>
  3. using namespace std;
  4. int strcmp_m(const char *s1,const char *s2)
  5. {
  6. assert((s1!=NULL)&&(s2!=NULL));
  7. while(*s1!='\0'&&*s2!='\0')//字符串前面部分都相同
  8. {
  9. if(*s1-*s2>0)
  10. return 1;
  11. if(*s1-*s2<0)
  12. return -1;
  13. s1++;
  14. s2++;
  15. }
  16. if(*s1=='\0'&&*s2!='\0')//谁先为'\0',谁就小
  17. return -1;
  18. if(*s2=='\0'&&*s1!='\0')
  19. return 1;
  20. return 0;              //同时为'\0'
  21. }
  22. int strncmp_m(const char *s1,const char *s2,int n)
  23. {
  24. assert((s1!=NULL)&&(s2!=NULL));
  25. while(*s1!='\0'&&*s2!='\0'&&n)//字符串前面部分都相同
  26. {
  27. if(*s1-*s2>0)
  28. return 1;
  29. if(*s1-*s2<0)
  30. return -1;
  31. s1++;
  32. s2++;
  33. n--;
  34. }
  35. if(*s1=='\0'&&*s2!='\0')//谁先为'\0',谁就小
  36. return -1;
  37. if(*s2=='\0'&&*s1!='\0')
  38. return 1;
  39. return 0;              //同时为'\0'
  40. }
  41. int main()
  42. {
  43. char a[]="aaaae";
  44. char b[]="aaaaf";
  45. int i=strcmp_m(a,b);
  46. cout<<i<<endl;
  47. int j=strncmp_m(a,b,4);//只比较前n个字符
  48. cout<<j<<endl;
  49. system("pause");
  50. return 0;
  51. }

运行结果为 -1,0,实现了strcmp()函数与strncmp()函数的功能。

最新文章

  1. [转]VS2015 cordova尝试-camera
  2. JavaScript数据结构——链表
  3. Tableau学习笔记之二
  4. Integer自动装箱分析
  5. windows系统下搭建Python开发环境
  6. OC中使用 static 、 extern、 const使用
  7. 编译kernel:编译
  8. 哈夫曼树压缩C#算法(huffman)
  9. linux 下oracle 11g静默安装(完整版)
  10. spring的基于注解的IOC配置
  11. Kafka Offset相关命令总结
  12. 换上 SansForgetica-Regular 字体,增加记忆能力
  13. day1 diff命令递归比较目录下的文件
  14. CentOS7图形界面与命令行界面切换
  15. PTA 7-1 畅通工程之局部最小花费问题(35 分)
  16. STM32F4XX devices vector table for EWARM toolchain.
  17. websocket 和 socket.io 之间的区别是什么
  18. 自定义redis序列化工具
  19. 玩转mongodb(六):索引,速度的引领(普通索引篇)
  20. UIAutomation学习入门

热门文章

  1. React Component(dva)
  2. Spring logger 配置
  3. Shiny学习实践01
  4. C#获取窗口大小和位置坐标 GetWindowRect用法
  5. Python2X和Python3X 除法运算符的使用:
  6. Vue双向数据绑定实现原理
  7. jsTree checkbox plugin使用笔记
  8. 关于jQuery.form中formSerialize()等函数的适用对象
  9. PAT_A1110#Complete Binary Tree
  10. 【剑指Offer】25、复杂链表的复制