C語言 - strcmp和strncmp的編程實現及總結


一、strcmp和strncmp的編程實現及總結

   1、strcmp函數的實現
      要求:
         原型: int strcmp(char *dest,char * src,int n);    
           頭文件:#include <string.h>
           功能:比較字符串s1和s2。
        說明:
               返回值:當s1<s2時,返回值<0
               返回值:當s1=s2時,返回值=0
               返回值:當s1>s2時,返回值>0
 
      mystrcmp代碼實現:
 int mystrcmp(const char *dest,const char *src)
  {  
       int i=0;
   //判斷str1與str2指針是否為NULL,函數assert的頭文件為#include<assert.h>
     assert(dest!=NULL && src !=NULL);  //[1]    
 
    //如果dest > source,則返回值大於0,如果dest = source,則返回值等於0,如果dest  < source ,則返回值小於0。  
   while (*dest && *src && (*dest == *src)) 
   {    
     dest ++;  
     src ++; 
   }
   return *dest - *source; [2]
}

  注意:

    代碼[1]:很多人會忘記對字符串指針的檢查,這一部分能體現程序員的嚴謹性,主要體現在一下三點,

           a、不檢查指針的有效性,說明答題者不注重代碼的健壯性 

           b、檢查指針的有效性時使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),說明答題者對C語言中類型的隱式轉換沒有深刻認識  

           c、檢查指針的有效性時使用((strDest==0)||(strSrc==0)),說明答題者不知道使用常量的好處

        代碼1類似於下述代碼:  if ((strDest == NULL)||(strSrc == NULL))  return -1;  

              assert並不是拋出異常,而是判斷是否出錯
 

       代碼[2]:為了優化代碼,此代碼中返回正數代表1,返回負數代表-1

  

    2、strncmp函數的實現
      要求:
          原型:extern int strcmp(char *s1,char * s2);    
          用法:#include <string.h>
             功能:比較字符串s1和s2的前n個字符。
             說明:
                 返回值:當s1<s2時,返回值<0
                 返回值:當s1=s2時,返回值=0
                 返回值:當s1>s2時,返回值>0 
 
     strncmp代碼實現:
int strncmp(const char *s1, const char *s2, size_t  len)
{
   //判斷str1與str2指針是否為NULL
     assert(s1!=NULL && s2 !=NULL);

    while(len--) 
   {
           if(*s1 == 0 || *s1 != *s2)
               return *s1 - *s2;
         
           s1++;
           s2++;
      }
      return 0;
}

    注意:注意事項同上,不過需要在上面的基礎上添加一步 長度N的判斷


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM