C語(yǔ)言求字符串長(zhǎng)度的四種方法實(shí)例代碼
前言
我們知道C語(yǔ)言是自帶內(nèi)置函數(shù)strlen求字符串長(zhǎng)度的,但其實(shí)我們也可以自己編寫(xiě)函數(shù)來(lái)求字符串長(zhǎng)度
方法一:調(diào)用內(nèi)置函數(shù)strlen求字符串長(zhǎng)度
#include <stdio.h> #include <string.h> int main() { char s[] = "abc"; int len = strlen(s); printf("%d ",len); return 0; }
方法二:創(chuàng)建臨時(shí)變量計(jì)算字符串長(zhǎng)度
首先,我們自定義函數(shù)my_strlen求字符串長(zhǎng)度
在my_strlen中用count統(tǒng)計(jì)字符的個(gè)數(shù),我們傳入的char類型的指針str,對(duì)他進(jìn)行解引用(*str)得到str指向的值,循環(huán)判斷(*str)是否等于‘\0’,如果不等,則count+1,str指向下一個(gè)字符;如果相等,則說(shuō)明遍歷到了字符串結(jié)尾,最后返回count,也就是統(tǒng)計(jì)的字符的個(gè)數(shù)。
代碼實(shí)現(xiàn)如下:
#include <stdio.h> int my_strlen(char* str) { int count = 0; //計(jì)數(shù) while(*str != '\0') { count++; str++; } return count; } int main() { char s[] = "abc"; int len = my_strlen(s); printf("%d ",len); return 0; }
方法三:不創(chuàng)建臨時(shí)變量計(jì)算字符串長(zhǎng)度(遞歸)
遞歸的主要思想:大事化小
使用遞歸的兩個(gè)必要條件:
1、存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)
2、每次遞歸調(diào)用之后越來(lái)越接近這個(gè)限制條件
計(jì)算字符串(abc)長(zhǎng)度的遞歸思想:
代碼實(shí)現(xiàn)如下:
#include <stdio.h> int my_strlen(char* str) { if(*str != '\0') { return 1 + my_strlen(str+1); } else return 0; } int main() { char s[] = "abc"; int len = my_strlen(s); printf("%d ",len); return 0; }
方法四:指針減指針求字符串長(zhǎng)度
兩個(gè)指針相減,得到的是兩個(gè)指針之間元素的個(gè)數(shù)
根據(jù)這個(gè)特性,我們可以有一種新的求字符串長(zhǎng)度的思路
代碼實(shí)現(xiàn):
#include <stdio.h> int my_strlen(char* str) { char* start = str; while(*str) { str++; } return str - start; } int main() { char s[] = "abc"; int len = my_strlen(s); printf("%d ",len); return 0; }
注意:
strlen()函數(shù)求出的字符串長(zhǎng)度為有效長(zhǎng)度,既不包含字符串末尾結(jié)束符 ‘\0’;
sizeof()操作符求出的長(zhǎng)度包含字符串末尾的結(jié)束符 ‘\0’;
當(dāng)在函數(shù)內(nèi)部使用sizeof()求解由函數(shù)的形參傳入的字符數(shù)組的長(zhǎng)度時(shí),得到的結(jié)果為指針的長(zhǎng)度,既對(duì)應(yīng)變量的字節(jié)數(shù),而不是字符串的長(zhǎng)度,此處一定要小心。(當(dāng)數(shù)組或者字符串(可以理解為數(shù)組)作為函數(shù)參數(shù)是,是會(huì)當(dāng)做指針來(lái)使用,指針的長(zhǎng)度由編譯器決定,大多數(shù)為4個(gè)byte. )
例如:
void strlen(char* str) { int length; length = sizeof(str)/sizeof(str[0]); //str為4個(gè)字節(jié),str[0] = 1 }
總結(jié)
到此這篇關(guān)于C語(yǔ)言求字符串長(zhǎng)度的四種方法的文章就介紹到這了,更多相關(guān)C語(yǔ)言求字符串長(zhǎng)度方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言詳細(xì)分析貪心策略中最小生成樹(shù)的Prime算法設(shè)計(jì)與實(shí)現(xiàn)
最小生成樹(shù)的問(wèn)題還是比較熱門(mén)的,最經(jīng)典的莫過(guò)于Prime算法和Kruskal算法了,這篇博文我會(huì)詳細(xì)講解Prime算法的設(shè)計(jì)思想與具體代碼的實(shí)現(xiàn),不要求數(shù)據(jù)結(jié)構(gòu)學(xué)的有多好,只要跟著我的思路來(lái),一步一步的分析,調(diào)試,終能成就自己,那就讓我們開(kāi)始吧2022-05-05C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解
這篇文章主要介紹了C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解的相關(guān)資料,需要的朋友可以參考下2023-01-01C++使用string的大數(shù)乘法運(yùn)算(3)
這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)乘法運(yùn)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09c++ 讓程序開(kāi)機(jī)自動(dòng)啟動(dòng)的方法
這篇文章主要介紹了c++ 讓程序開(kāi)機(jī)自動(dòng)啟動(dòng)的方法,需要的朋友可以參考下2017-09-09C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01C語(yǔ)言實(shí)現(xiàn)三子棋游戲(初級(jí)版)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲初級(jí)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09C語(yǔ)言中使用快速排序算法對(duì)元素排序的實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言中使用快速排序算法對(duì)元素排序的實(shí)例詳解,文中細(xì)分了幾個(gè)情況來(lái)舉例,在注釋里有說(shuō)明,需要的朋友可以參考下2016-04-04