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


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

    一、strcmp()与strncmp()

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

           比较规则:从左到右逐个字符进行比较(ASCII值),直到出现不同的字符或遇到''为止。
           如果全部的字符相同,则认为两字符串相等,返回值为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!=''&&*s2!='')//字符串前面部分都相同  
    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==''&&*s2!='')//谁先为'',谁就小  
    19.         return -1;  
    20.     if(*s2==''&&*s1!='')  
    21.         return 1;  
    22.     return 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!=''&&*s2!=''&&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==''&&*s2!='')//谁先为'',谁就小  
    40.         return -1;  
    41.     if(*s2==''&&*s1!='')  
    42.         return 1;  
    43.     return 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()函数的功能。

     

  • 相关阅读:
    研究table-cell和overflow
    自己封装jquery的一些方法 链式调用模式
    简单的抖动运动 主要利用offset left 和 setTimeout
    闭包的讲解与简单实用(重新理解)
    操作iframe 的方法与兼容性
    360度全景图片
    数组排序
    怎么让链式调用setTimeout停止
    setInterval 和 setTimeout
    重力碰撞运动的疑惑
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7465520.html
Copyright © 2020-2023  润新知