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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串函数---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.   
  5. int main()  
  6. {  
  7.     char a[]="aaaae";  
  8.     char b[]="aaaaf";  
  9.   
  10.     int i=strcmp(a,b);  
  11.   
  12.     cout<<i<<endl;  
  13.   
  14.     int j=strncmp(a,b,4);//只比较前n个字符  
  15.   
  16.     cout<<j<<endl;  
  17.   
  18.   
  19.     system("pause");  
  20.     return 0;  
  21. }  

运行结果为 -1,0;

 

 

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

 

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


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

 

 

以上是关于字符串函数---strcmp()与strncmp()详解及实现的主要内容,如果未能解决你的问题,请参考以下文章

strcmp和strncmp

strcmp和strncmp

C中的memcmp,strcmp和strncmp有啥区别?

strcpy()函数和strcmp()函数怎么用?

C语言进阶字符函数和字符串函数

C语言———字符与字符串