C語言自定義實現strlen函數的3種方法總結
在自定義實現strlen函數之前,我們簡單的介紹一下strlen函數。strlen的功能就是求字符串長度。它只能作用于字符串,是C語言中的庫函數,使用時要引用 < string.h> 這個頭文件。每個字符串結尾處都隱藏有 ‘\0’ ,它是字符串的結束標志,所以我們在用strlen函數求字符串長度時,遇見 ‘\0’ 時就停止讀取字符串,字符串長度為 ‘\0’ 之前的字符個數,不包括 ‘\0’ 。
簡單介紹strlen函數之后,讓我們開始正文
1.計數器
這是3種方法里面最簡單的一種,只用將數組作為函數參數,再用計數器i充當數組下標,若arr[i]不是轉義字符 ‘\0’ ,i++;直到為 ‘\0’ 時,返回計數器i
int my_strlen(char arr[])
{
int i = 0;
while (arr[i] != '\0')
{
i++;
}
return i;
}
int main()
{
char arr[] = "abcdefg";//abcdefg\0
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
//72.遞歸(不用創(chuàng)造臨時變量)
將數組作為函數實參,實際上傳過去的是數組首元素地址,用指針接收變量str接收,對str進行解引用操作找到str指向的字符,若該字符為 ‘\0’ ,則返回0;否則返回1+my_strlen(str + 1),再進入my_strlen函數時,str指向下一位,繼續(xù)上述判斷。
例如:若下面代碼中char arr[ ]=“ab”,將數組名arr作為函數實參,用指針str接收,此時str指向數組首元素即字符a。對指針str進行解應用str=a,a!= ‘\0’ ,所以函數返回1+my_strlen(str + 1),再進行下一次遞歸, 此時str指向下一位字符b。對指針str進行解應用str=b,b!= ‘\0’ ,所以函數返回1+my_strlen(str+1),再進行下一次遞歸, 此時str指向下一位字符 ‘\0’ 。對指針str進行解應用*str= ‘\0’ ,所以函數返回0,接著返回上一次遞歸,此時str指向字符b,my_strlen(str + 1) 的結果為0,所以1+my_strlen(str + 1)的結果=1并再將1返回上一次遞歸。此時str指向字符a,my_strlen(str + 1)的結果=1,所以1+my_strlen(str + 1)結果=2,將2作為最后的值返回。
int my_strlen(char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr[] = "abcdefg";//abcdefg\0
int len = my_strlen(arr);
printf("%d", len);
return 0;
}3.指針(指針-指針的差值的絕對值是它們之間的元素個數)
思想:只要最后指針str指向的是 ‘\0’ ,指針start指向的是數組首元素a,那么str - start就是字符串長度
創(chuàng)建指針變量start存放數組首元素地址(str就是數組首元素地址),再用while循環(huán)使得str最后指向 ‘\0’ ,返回兩指針的差值
int my_strlen(char* str)
{
char* start = str;
while (*str != '\0')
{
str++;
}
return str - start;
}
int main()
{
char arr[] = "abcdefg";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}到此這篇關于C語言自定義實現strlen函數的3種方法總結的文章就介紹到這了,更多相關C語言實現strlen函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VS配置好Qt環(huán)境之后但無法打開ui界面的問題解決
本文主要介紹了VS配置好Qt環(huán)境之后但無法打開ui界面的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-06-06

