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

本文转载自: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)。

代码实例:

[cpp] view plain copy

  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()的具体实现

[cpp] view plain copy

  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()函数的功能。

时间: 2024-10-18 03:09:13

字符串函数---strcmp()与strncmp()详解及实现【转】的相关文章

字符串函数---strcmp()与strncmp()详解及实现

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

[转载]Linux C 字符串函数 sprintf()、snprintf() 详解

一.sprintf() 函数详解 在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致 sprintf 比 printf 有用得多.所以本文着重介绍 sprintf,有时也穿插着用用 pritnf. sprintf是个变参函数,定义如下: int sprintf( char *buffer, const char *format [

字符串函数---strcat()与strncat详解及实现

一.strcat()与strncat() strcat():strcat(dest,src);        strcat把src所指向的字符添加到dest结尾处(覆盖原dest结尾处的'\0'),并添加新的'\0'. 说明:src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针. strncat():strncat(dest,src,n);      strncat把速溶茶所指向的字符的前n个字符添加到dest结尾处(覆盖原dest结尾

字符串函数---strcpy()与strncpy()详解及实现

一.strcpy()与strncpy() strcpy():strcpy(dest,src);    strcpy把src所指向以'\0'结尾的字符串复制到dest所指的数组中,返回指向dest的指针. 当sizeof(dest)>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0'; 当sizeof(dest)<sizeof(src)时,拷贝出错. strncpy():strncpy(dest,src,n);    strncpy把src所指向以'\0'结尾的字符串的前n

(一)Python入门-5函数:02形参和实参-文档字符串-函数注释-返回值详解

一:形参和实参 [操作]定义一个函数,实现两个数的比较,并返回较大的值. 1 def printMax(a,b): 2 '''实现两个数的比较,并返回最大值!''' 3 if a >b: 4 print(a,'较大值') 5 else: 6 print(b, '较大值') 7 8 printMax(20,30) 9 printMax(30,5) 10 11 #测试文档字符串的使用 12 help(printMax) 13 help(printMax.__doc__) 上面的 printMax 函

函数WideCharToMultiByte() 详解

函数原型: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar ); 函数功能: 此函数把宽字符串转换成指定的新的字符串,如ANSI,UTF8等,新字符串不必是多字节字符集. (---Uni

JS函数动作分层结构详解及Document.getElementById 释义 事件 函数 变量 script标签 var function

html +css 静态页面 js     动态 交互 原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向的时候换一个颜色,就是一个修改样式的工具. 编写JS的流程 布局:HTML+CSS 事件:确定用户做哪些操作(产品设计) 编写JS:在事件中,用JS来修改页面元素的样式(外加属性:确定要修改哪些属性) 什么是事件 一个完整的事件= <在某个作用域 事件声明='函数动作'> </> 作用域:

CC150 1.1 字符串查唯一bit manipulation详解

public boolean isUniqueChars2(String str) { int checker = 0; for (int i = 0; i < str.length(); i++) { int val = str.charAt(i) - 'a'; //保证val的值不超过26 if ((checker & (1 << val)) > 0) { return false; } else { checker |= (1 << val);//chec

bash数组和字符串处理、yum命令详解及编译安装

8月22号主要内容: 一.bash中的数组 二.bash中字符串处理 三.高级变量及配置用户环境 四.yum详解 五.编译安装 一.bash中的数组 1.数组的组成和申明 (1) 数组:存储多个元素的连续的内存空间,相当于多个变量的 集合. (2) 组成:数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式 ,即为关联索引,bash4.0版本之后开始支持. bash的数组支持稀疏格式(索引不连续) (3) 申明数组: declare -a ARRAY