C語言自定義實現(xiàn)strlen函數(shù)的3種方法總結(jié)
在自定義實現(xiàn)strlen函數(shù)之前,我們簡單的介紹一下strlen函數(shù)。strlen的功能就是求字符串長度。它只能作用于字符串,是C語言中的庫函數(shù),使用時要引用 < string.h> 這個頭文件。每個字符串結(jié)尾處都隱藏有 ‘\0’ ,它是字符串的結(jié)束標志,所以我們在用strlen函數(shù)求字符串長度時,遇見 ‘\0’ 時就停止讀取字符串,字符串長度為 ‘\0’ 之前的字符個數(shù),不包括 ‘\0’ 。
簡單介紹strlen函數(shù)之后,讓我們開始正文
1.計數(shù)器
這是3種方法里面最簡單的一種,只用將數(shù)組作為函數(shù)參數(shù),再用計數(shù)器i充當(dāng)數(shù)組下標,若arr[i]不是轉(zhuǎn)義字符 ‘\0’ ,i++;直到為 ‘\0’ 時,返回計數(shù)器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; } //7
2.遞歸(不用創(chuàng)造臨時變量)
將數(shù)組作為函數(shù)實參,實際上傳過去的是數(shù)組首元素地址,用指針接收變量str接收,對str進行解引用操作找到str指向的字符,若該字符為 ‘\0’ ,則返回0;否則返回1+my_strlen(str + 1),再進入my_strlen函數(shù)時,str指向下一位,繼續(xù)上述判斷。
例如:若下面代碼中char arr[ ]=“ab”,將數(shù)組名arr作為函數(shù)實參,用指針str接收,此時str指向數(shù)組首元素即字符a。對指針str進行解應(yīng)用str=a,a!= ‘\0’ ,所以函數(shù)返回1+my_strlen(str + 1),再進行下一次遞歸, 此時str指向下一位字符b。對指針str進行解應(yīng)用str=b,b!= ‘\0’ ,所以函數(shù)返回1+my_strlen(str+1),再進行下一次遞歸, 此時str指向下一位字符 ‘\0’ 。對指針str進行解應(yīng)用*str= ‘\0’ ,所以函數(shù)返回0,接著返回上一次遞歸,此時str指向字符b,my_strlen(str + 1) 的結(jié)果為0,所以1+my_strlen(str + 1)的結(jié)果=1并再將1返回上一次遞歸。此時str指向字符a,my_strlen(str + 1)的結(jié)果=1,所以1+my_strlen(str + 1)結(jié)果=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.指針(指針-指針的差值的絕對值是它們之間的元素個數(shù))
思想:只要最后指針str指向的是 ‘\0’ ,指針start指向的是數(shù)組首元素a,那么str - start就是字符串長度
創(chuàng)建指針變量start存放數(shù)組首元素地址(str就是數(shù)組首元素地址),再用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; }
到此這篇關(guān)于C語言自定義實現(xiàn)strlen函數(shù)的3種方法總結(jié)的文章就介紹到這了,更多相關(guān)C語言實現(xiàn)strlen函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言fprintf()函數(shù)和fscanf()函數(shù)的具體使用
本文主要介紹了C語言fprintf()函數(shù)和fscanf()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11C語言學(xué)生信息管理系統(tǒng)設(shè)計與實現(xiàn)
這篇文章主要為大家詳細介紹了C語言學(xué)生信息管理系統(tǒng)設(shè)計與實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01C語言編程中對目錄進行基本的打開關(guān)閉和讀取操作詳解
這篇文章主要介紹了C語言編程中對目錄進行基本的打開關(guān)閉和讀取操作,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09