三種方法實現strlen函式

每天和鍵盤在一起發表於2023-05-18

在我們使用C語言寫程式碼時,我們常常會用到strlen函式,你是否好奇過strlen是如何實現的呢?接下來,我將會使用3種方法實現strlen函式。


1.計數器法

計數器法應該是最常見的strlen實現方法,其基本原理就是透過計數器計算迴圈的次數,從而實現計算字串長度的作用


//#include<stdio.h>

//#include<assert.h>

//int my_strlen(const char *str)

//{

//  assert(str);

//  int count = 0;

//  while (*str++ != 0)

//  {

//    count++;

//  }

//  return count;

//}

//

//int main()

//{

//  char arr[] = {"abcdef"};

//  int ret = my_strlen(arr);

//  printf("%d", ret);

//  return 0;

//}


1.為了防止字串被改變,於是使用const來保護字串,增加程式碼的健壯性 2.使用assert斷言是為了防止傳過來的是空指標


2.遞迴法

遞迴法的主要思想就是要判斷第一字元是不是\0,如果不是就1+下一次函式實現,總的來說就是大事化小的思想。


//遞迴實現strlen

#include<stdio.h>

int my_strlen(char*str)

{

  if ((*str) != '\0')

  {

    return 1 + my_strlen(str + 1);

  }

  else

    return 0;

}

int main()

{

  char arr[] = {"abcdef"};

  printf("%d", my_strlen(arr));

  return 0;

}


3.指標減指標法

首先需要明確,指標減去指標得到的是什麼?是這兩個元素之間的資料的個數。 要使用指標相減,就要找到字串的初末指標,只可以透過尋找\0來實現


//用指標減指標來實現strlen的功能

#include<stdio.h>

int my_strlen(char* str)//str接收首元素a的地址

{

   char* start = str;//start裡面裝的是首元素a的地址

   while (*str != '\0')//解引用指標str,或者寫成while(*str)---真(更好)

   {

      str++;//指標/地址++,str是個指標變數

   }

   return str - start;//指標減指標為兩個指標之間元素的個數

}

int main()

{

   int len = my_strlen("abc");

   printf("%d", len);

   return 0;

}


以上就是strlen的3種實現方法,一個我們平時習以為常的庫函式卻有3種實現方,完全不一樣的實現邏輯,這或許就程式設計的樂趣吧。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70030112/viewspace-2953161/,如需轉載,請註明出處,否則將追究法律責任。

相關文章