C語言求字符串長度的四種方法實例代碼
前言
我們知道C語言是自帶內置函數(shù)strlen求字符串長度的,但其實我們也可以自己編寫函數(shù)來求字符串長度
方法一:調用內置函數(shù)strlen求字符串長度
#include <stdio.h> #include <string.h> int main() { char s[] = "abc"; int len = strlen(s); printf("%d ",len); return 0; }
方法二:創(chuàng)建臨時變量計算字符串長度
首先,我們自定義函數(shù)my_strlen求字符串長度
在my_strlen中用count統(tǒng)計字符的個數(shù),我們傳入的char類型的指針str,對他進行解引用(*str)得到str指向的值,循環(huán)判斷(*str)是否等于‘\0’,如果不等,則count+1,str指向下一個字符;如果相等,則說明遍歷到了字符串結尾,最后返回count,也就是統(tǒng)計的字符的個數(shù)。
代碼實現(xiàn)如下:
#include <stdio.h> int my_strlen(char* str) { int count = 0; //計數(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)建臨時變量計算字符串長度(遞歸)
遞歸的主要思想:大事化小
使用遞歸的兩個必要條件:
1、存在限制條件,當滿足這個限制條件的時候,遞歸便不再繼續(xù)
2、每次遞歸調用之后越來越接近這個限制條件
計算字符串(abc)長度的遞歸思想:
代碼實現(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; }
方法四:指針減指針求字符串長度
兩個指針相減,得到的是兩個指針之間元素的個數(shù)
根據(jù)這個特性,我們可以有一種新的求字符串長度的思路
代碼實現(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ù)求出的字符串長度為有效長度,既不包含字符串末尾結束符 ‘\0’;
sizeof()操作符求出的長度包含字符串末尾的結束符 ‘\0’;
當在函數(shù)內部使用sizeof()求解由函數(shù)的形參傳入的字符數(shù)組的長度時,得到的結果為指針的長度,既對應變量的字節(jié)數(shù),而不是字符串的長度,此處一定要小心。(當數(shù)組或者字符串(可以理解為數(shù)組)作為函數(shù)參數(shù)是,是會當做指針來使用,指針的長度由編譯器決定,大多數(shù)為4個byte. )
例如:
void strlen(char* str) { int length; length = sizeof(str)/sizeof(str[0]); //str為4個字節(jié),str[0] = 1 }
總結
到此這篇關于C語言求字符串長度的四種方法的文章就介紹到這了,更多相關C語言求字符串長度方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C語言詳細分析貪心策略中最小生成樹的Prime算法設計與實現(xiàn)
最小生成樹的問題還是比較熱門的,最經典的莫過于Prime算法和Kruskal算法了,這篇博文我會詳細講解Prime算法的設計思想與具體代碼的實現(xiàn),不要求數(shù)據(jù)結構學的有多好,只要跟著我的思路來,一步一步的分析,調試,終能成就自己,那就讓我們開始吧2022-05-05C++命名空間?缺省參數(shù)?const總結?引用總結?內聯(lián)函數(shù)?auto關鍵字詳解
這篇文章主要介紹了C++命名空間?缺省參數(shù)?const總結?引用總結?內聯(lián)函數(shù)?auto關鍵字詳解的相關資料,需要的朋友可以參考下2023-01-01