C語言求字符串長度的四種方法實例代碼
前言
我們知道C語言是自帶內(nèi)置函數(shù)strlen求字符串長度的,但其實我們也可以自己編寫函數(shù)來求字符串長度
方法一:調(diào)用內(nèi)置函數(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,對他進(jìn)行解引用(*str)得到str指向的值,循環(huán)判斷(*str)是否等于‘\0’,如果不等,則count+1,str指向下一個字符;如果相等,則說明遍歷到了字符串結(jié)尾,最后返回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、存在限制條件,當(dāng)滿足這個限制條件的時候,遞歸便不再繼續(xù)
2、每次遞歸調(diào)用之后越來越接近這個限制條件
計算字符串(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ù)求出的字符串長度為有效長度,既不包含字符串末尾結(jié)束符 ‘\0’;
sizeof()操作符求出的長度包含字符串末尾的結(jié)束符 ‘\0’;
當(dāng)在函數(shù)內(nèi)部使用sizeof()求解由函數(shù)的形參傳入的字符數(shù)組的長度時,得到的結(jié)果為指針的長度,既對應(yīng)變量的字節(jié)數(shù),而不是字符串的長度,此處一定要小心。(當(dāng)數(shù)組或者字符串(可以理解為數(shù)組)作為函數(shù)參數(shù)是,是會當(dāng)做指針來使用,指針的長度由編譯器決定,大多數(shù)為4個byte. )
例如:
void strlen(char* str)
{
int length;
length = sizeof(str)/sizeof(str[0]); //str為4個字節(jié),str[0] = 1
}
總結(jié)
到此這篇關(guān)于C語言求字符串長度的四種方法的文章就介紹到這了,更多相關(guān)C語言求字符串長度方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++設(shè)計模式之Static Factory模式詳解
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之Static Factory模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
C++中的while循環(huán)和for循環(huán)語句學(xué)習(xí)教程
這篇文章主要介紹了C++中的while循環(huán)和for循環(huán)語句學(xué)習(xí)教程,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09
使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作
這篇文章給大家介紹了使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12
虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析
本篇文章是對虛函數(shù)與純虛函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
OpenCV實現(xiàn)圖像轉(zhuǎn)換為漫畫效果
這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)圖像轉(zhuǎn)換為漫畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08
C++?點(.)和箭頭(->)運(yùn)算符用法小結(jié)
在C++中,點運(yùn)算符(.)用于訪問類的成員變量和成員函數(shù),而箭頭運(yùn)算符(->)用于通過指針訪問類的成員變量和成員函數(shù),本文就來詳細(xì)的介紹一下如何使用,感興趣的可以了解一下2024-01-01

